Я работаю над исполняемым скриптом Windows. Я нашел способ установить переменную в случайную строку из текстового файла. Это кусок, который начинается с строки 4 и эха !current_proxy!
.Получите случайную строку из текстового файла в пакете Windows
Я попытался скопировать этот фрагмент в другой раздел командного файла (раздел с большим пустым пространством вокруг него), чтобы я мог получить другую случайную строку, если/когда определенный файл не загружается. Почему он не работает на этот раз? Использую ли я неправильные символы (например, %
и !
)? Благодарю.
@echo off
setlocal EnableDelayedExpansion
set proxies_list="proxies.txt"
:: # Count the number of lines in the text file and generate a random number.
for /f "usebackq" %%c in (`find /V /C "" ^< %proxies_list%`) do set lines=%%c
set /a random_number=%RANDOM% * lines/32768 + 1, skiplines=random_number-1
:: # Extract the line from the file.
set skip=
if %skiplines% gtr 0 set skip=skip=%skiplines%
for /f "usebackq %skip% delims=" %%c in (%proxies_list%) do set "current_proxy=%%c" & goto continue
:continue
echo/!current_proxy!
for %%a in (xml\*.xml) do (
for /l %%b in (0,1,337) do (
set /a "x=%%b%%26"
set /a "y=%%b/26"
set /a "tile_number=%%b+1"
if not exist "C:\Users\User\Desktop\panoid\tiles\%%~na\%%~na_tile!tile_number!.jpg" (
echo C:^\Users^\User^\Desktop^\panoid^\tiles^\%%~na^\%%~na_tile!tile_number!.jpg
"C:\Portable programs\wget64.exe" --read-timeout=10 --tries=3 -e use_proxy=on -e http_proxy=!current_proxy! -O "C:\Users\User\Desktop\panoid\tiles\%%~na\%%~na_tile!tile_number!.jpg" "http://updatethis.com"
FOR /F "usebackq" %%d IN ("C:\Users\User\Desktop\panoid\tiles\%%~na\%%~na_tile!tile_number!.jpg") DO set size=%%~zd
if !size! GTR 0 (
echo File not empty.
) ELSE (
echo File empty.
for /f "usebackq" %%c in (`find /V /C "" ^< %proxies_list%`) do set lines=%%c
set /a random_number=%RANDOM% * lines/32768 + 1, skiplines=random_number-1
set skip=
if %skiplines% gtr 0 set skip=skip=%skiplines%
for /f "usebackq %skip% delims=" %%c in (%proxies_list%) do set "current_proxy=%%c" & goto continue
:continue
echo/!current_proxy!
)
)
)
)
pause
Каждая переменная, которая изменяется внутри заключенного в скобки блока кода, должна считываться с использованием замедленного расширения (например, '! Skiplines!', '! Skip!' И '! RANDOM!'). ** Но: ** Отсроченное расширение не может использоваться в строке опций для 'for/F', поэтому'! Skip! 'Там не работает; поэтому вы должны переместить цикл 'for/F' в подпрограмму; вы можете предоставить '! skip!' в качестве аргумента и получить доступ к нему как '% 1' в подпрограмме, которая работает в строке опций' for/F' ... – aschipfl
См. также [этот ответ] (http : //stackoverflow.com/a/39653402) ... – aschipfl