Первая проблема: метка в пределах блока (a parenthesised series of statements)
завершает блок (это может быть версия-зависимой) Таким образом, команды, следующие метка будет выполняться независимо от того, что результат оставшейся части блока.
Вторая проблема: подпрограмма :skip
завершена несбалансированным )
. Это может быть безвредным само по себе, но оно не прекратить рутину. call :skip
будет продолжать exit
или конец файла перед возвратом.
Третья проблема: Внутри оператора блока (a parenthesised series of statements)
, блок весь разбирается и затем выполняется. Любой %var%
в блоке будет заменен значением этой переменной на момент анализа блока - до того, как блок будет выполнен - то же самое относится к FOR ... DO (block)
.
Следовательно, IF (something) else (somethingelse)
будет выполнен с использованием значений %variables%
в момент возникновения ошибки IF
.
Два распространенный способ преодоления этого является: 1) использовать setlocal enabledelayedexpansion
и использовать !var!
вместо %var%
, чтобы получить доступ к измененному значению var
или 2) для вызова подпрограммы, чтобы выполнить дальнейшую обработку с использованием измененных значений.
Так что - в вашем случае второго if %errorlevel% == 0
будет applt значения errorlevel
в момент первого if
в фрагменте коды вы показываете нам встречались, не измененное значение в зависимости от обработки.
Следующая проблема заключается в том, что вы excuting в for/f
на ftp.txt
и появляются ничего не делать с данными, полученными от ftp.txt
- %%a
не используется вообще в рутине, все это делает попытку call :skip
один раз для каждой строки в ftp.txt
,
Так что-
if %errorlevel% == 0 (
start /wait /d "%folder%"\test setup.exe
if not errorlevel 1 (call :skip)
)
goto :eof
:skip
rd /s /q "%location%"
rd /s /q "%folder%"\agent
goto :eof
может выполнять работу, при условии, что errorlevel
установлено ненулевым, если удаление будет отменено. Обратите внимание, что формат if [not] errorlevel n
относится к времени выполнения значения уровня ошибки, тогда как if %errorlevel% == 0
применяется к значению разбора .
Без знания о том, что ftp.txt
и %%a
должны быть использованы для, я понятия не имею, что делать с ними ...
Привет Нефий, Только что проверил не работает. – Honey
ОК, так что ... какова цель цикла for? вы уже знаете, что errorlevel равен 0, если вы используете цикл, и все, что он делает, это проверить, что .... так что он делает? – nephi12