Сначала посмотрите на ответы по Почему нет строкового вывода с 'echo% var%' после использования 'set var = text' в командной строке? и Как установить переменные средыс пробелами? Эти ответы очень подробно объясняют разницу между set "variable=value"
и set variable="value"
.
Рабочий код:
set "DownParameters=--continue --wait=5 --no-check-certificate --retry-connrefused --tries=30 -blah -blah"
set "URL=https://someip/a.zip"
call :myWGET %DownParameters% "%URL%"
goto :EOF
:myWGET
for %%I in (%*) do if /I "%%~I" == "STOP" exit /B 1
echo wget.exe %*
wget.exe %*
goto :EOF
A FOR loopили FINDSTR может использоваться для выхода из подпрограммы, если какой-либо аргумент, переданный подпрограмме, нечувствителен к регистру слова STOP
.
for %%I in (%*) do if /I "%%~I" == "STOP" exit /B 1
Цикл FOR обрабатывает каждый аргумент в списке аргументов и запускает IF для простого сравнения строк без учета регистра, при котором двойные кавычки удаляются из строки аргумента перед сравнением со словом STOP
.
echo %* | %SystemRoot%\System32\findstr.exe /I /R "\<STOP\>" >nul 2>&1 && exit /B 1
ECHO перенаправляет список аргументов одной строкой в FINDSTR , который ищет слово STOP
без учета регистра. FINDSTR завершается кодом выхода 0, если слово действительно найдено, и в этом случае командный процессор Windows выполняет команду EXIT .В противном случае FINDSTR заканчивается на 1, указывая, что искомая строка не найдена, и поэтому командный процессор Windows продолжает выполнение следующей командной строки в пакетном файле.Вывод FINDSTR для обработки STDOUT и STDERR подавляется путем перенаправления его на устройство NUL по мере необходимости.
Цикл FOR лучше, на мой взгляд, лучше сравнивать целые строки аргументов без или с заключенными в них двойными кавычками, разделенными одним или несколькими пробелами.
Для понимания используемых команд и их работы,откройте окно командной строки, выполните там следующие команды и полностью прочитайте все страницы справки, отображаемые для каждой команды.
call /?
... объясняет также %*
echo /?
findstr /?
for /?
goto /?
if /?
set /?
См. Также: