【问题标题】:How to skip a command in batch如何批量跳过命令
【发布时间】:2018-01-15 14:03:43
【问题描述】:

我正在运行一个简单的批处理脚本来启动 2 个程序。我如何添加一行来检查程序是否正在运行。我怎样才能跳过程序的启动并进入下一行。

@echo off

tasklist /FI "IMAGENAME eq Test123.exe" 2>NUL | find /I /N "Test123.exe">NUL
if "%ERRORLEVEL%"=="0" echo program is running

cd "C:\Program Files (x86)\Test123"
start Test123.exe

cd "C:\Program Files (x86)\Test123"
start OtherTest123.exe

exit

【问题讨论】:

  • 第二句是否有错字 - 因为您有一行检查程序是否正在运行?如果错误级别为0,现在您想跳过一行?
  • 是的,如果错误级别为 0,我想跳过该行。很抱歉造成混淆
  • 使用 if 命令,如果遇到条件,您可以使用括号来放置一些命令。你没试过吗?
  • 我不知道该怎么做。我没有经常使用批处理文件。我试图寻找一个跳过接下来几行但找不到任何内容的命令。

标签: windows batch-file cmd


【解决方案1】:

您可以使用标签和 GOTO 来控制通过文件的流程,如下所示:

@echo off

tasklist /FI "IMAGENAME eq Test123.exe" 2>NUL | find /I /N "Test123.exe">NUL
if "%ERRORLEVEL%"=="0" GOTO nextprogram

cd "C:\Program Files (x86)\Test123"
start Test123.exe

:nextprogram
cd "C:\Program Files (x86)\Test123"
start OtherTest123.exe

exit

更多详细的goto描述请看这里:https://ss64.com/nt/goto.html

【讨论】:

  • 如果使用括号是一个更好的选择,goto 会减慢脚本的速度。
  • 你是对的,如果你关心性能,尤其是批处理文件很长,括号是更好的选择。必须在批处理文件中搜索标签。顺序是从上到下。如果到达末尾但没有找到它,它会在文件顶部继续搜索。文件越长,花费的时间就越多。
【解决方案2】:

@user3154458 的回答会起作用,但为了可读性和维护,我会推荐一个代码块。此外,使用CD /D 将确保同时更改默认驱动器。

@echo off
PUSHD "C:\Program Files (x86)\Test123"

tasklist /FI "IMAGENAME eq Test123.exe" 2>NUL | find /I /N "Test123.exe">NUL
if NOT "%ERRORLEVEL%"=="0" (start Test123.exe)
start OtherTest123.exe

POPD    
exit /B %ERRORLEVEL%

【讨论】:

    【解决方案3】:

    我建议也许这样做:

    @Echo Off
    CD /D "%ProgramFiles(x86)%\Test123" 2>Nul||Exit /B
    TaskList|FindStr/I "\<Test123.exe\>">Nul&&(Start "" "OtherTest123.exe")||Start "" "Test123.exe"
    

    【讨论】:

    • 我相信这会奏效,@Compo。但是,打开包装需要几个脑循环。这对于理解和维护来说代价高昂。
    • 我更喜欢换行符。我不确定它是否会减少所需的思考。
    • 让我们看看 OP 对解决方案的复杂性有什么看法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-18
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 1970-01-01
    • 2023-04-01
    • 2019-09-03
    相关资源
    最近更新 更多