我对如何在批处理中使用“for、if、echo、goto”有疑问

我对如何在批处理中使用“for、if、echo、goto”有疑问

我有以下批处理脚本,但它没有转到标签:

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

相关内容