【问题标题】:Batch command doesn't stop批处理命令不会停止
【发布时间】:2016-06-19 18:22:22
【问题描述】:

所以我有一个带有这个“代码”的 cmds.bat 文件。它只是一个简单的工具,要求我执行最常用的命令行命令:

@echo off
:Ask
echo What command should I excute?
echo 1) ncu -g
echo 2) gem outdated
echo 3) gem update
echo 4) pip list --outdated
echo 5) pip upgrade all packages!
set INPUT=
set /P INPUT=Type input: %=%
If "%INPUT%"=="1" goto cmd1
If "%INPUT%"=="2" goto cmd2
If "%INPUT%"=="3" goto cmd3
If "%INPUT%"=="4" goto cmd4
If "%INPUT%"=="5" goto cmd5
:cmd1
ncu -g
:end
:cmd2
gem outdated
:end
:cmd3
gem update
:end
:cmd4
pip list --outdated
:end
:cmd5
pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U
:end
:quit

每当我按 4 时,它都会执行第 4 和第 5 个命令,而不仅仅是第 4 个。我做错了什么?

【问题讨论】:

  • :end 不做任何事情,你应该用goto :quitgoto :eof 替换它
  • 您还应该考虑用户输入除1 之外的其他内容到5 的情况,例如,将goto :quit 放在if 查询之后...
  • 因为每个选项只执行一个命令,我建议使用If "%INPUT%"=="1" ncu.exe -g & goto :EOFIf "%INPUT%"=="2" gem.exe outdated & goto :EOF等等。这使得批处理代码更加紧凑。有关& 操作数的详细信息,请参阅Single line with multiple commands using Windows batch file 上的答案。
  • @DennisvanGils 将您的评论转换为答案以解决此帖子。
  • @Mofi 它可能更紧凑,但不太清晰。

标签: batch-file command-line command


【解决方案1】:

您在代码中使用:end,这不是命令,而是标签,并且什么都不做。我建议使用

@echo off
:Ask
echo What command should I excute?
echo 1) ncu -g
echo 2) gem outdated
echo 3) gem update
echo 4) pip list --outdated
echo 5) pip upgrade all packages!
set INPUT=
set /P INPUT=Type input: %=%
If "%INPUT%"=="1" goto cmd1
If "%INPUT%"=="2" goto cmd2
If "%INPUT%"=="3" goto cmd3
If "%INPUT%"=="4" goto cmd4
If "%INPUT%"=="5" goto cmd5
:cmd1
ncu -g
goto :eof
:cmd2
gem outdated
goto :eof
:cmd3
gem update
goto :eof
:cmd4
pip list --outdated
goto :eof
:cmd5
pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U
goto :eof

goto :eof 不需要一个名为 :eof 的实际标签,而只是转到文件末尾(这也是为什么你不应该有一个名为 :eof 的标签的原因)

如果这不是您的全部代码,并且您仍需要在批处理文件中执行其他操作,则可以使用您的 :quit 标签并将 goto :eof 替换为 goto :quit

【讨论】:

    猜你喜欢
    • 2023-04-05
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 2015-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多