我有以下批处理脚本,但它没有转到标签:
for /f %%i in ('some commands') do echo %%i
IF %%i == A (goto :A) else (goto :end)
IF %%i == B (goto :B) else (goto :end)
:A
echo "OK A"
:B
echo "OK B"
:end
echo "It is not A or B"
exit
如果命令的输出是字母 A,则转到标签 A;如果是 B,则转到 B;如果是“空”或“其他内容”,则转到结尾。但我无法让它转到标签 :A 或 :B
我尝试使用引号或方括号,但没有得到预期的结果:
IF [%%i] == [] goto :end
IF [%%i] == [A] goto :A
IF [%%i] == [B] goto :B
或者
IF "%%i" == "" goto :end
IF "%%i" == "A" goto :A
IF "%%i" == "B" goto :B
提前致谢
答案1
FOR 变量仅在循环本身中有效。
但是您的循环仅包含一个语句echo %%i
。
因此您的 循环IF %%i ...
无法工作。
如果希望整个块成为循环的一部分,请将其括在括号中
for /f %%i in ('some commands') do (
echo %%i
IF %%i == A (goto :A) else (goto :end)
IF %%i == B (goto :B) else (goto :end)
)
但现在有另一个问题,GOTO
在循环内执行会取消循环。
更好地利用CALL
for /f %%i in ('some commands') do (
echo Loop: "%%i"
IF "%%i" == "A" call :A
IF "%%i" == "B" call :B
)
exit /b
:A
echo "OK A"
exit /b
:B
echo "OK B"
exit /b