【问题标题】:Start batch file from specific line从特定行开始批处理文件
【发布时间】:2020-11-05 18:38:32
【问题描述】:

如何从特定行开始批处理文件?有什么办法吗?

我的batch-file

:start
vmrun -T ws -gu "User" -gp "1" start "G:\Virtual Machines\test 1\test 1.vmx"
vmrun -T ws -gu "User" -gp "1" start "G:\Virtual Machines\test 2\test 2.vmx"
vmrun -T ws -gu "User" -gp "1" start "G:\Virtual Machines\test 3\test 3.vmx"
goto start

例如,我想从第 3 行开始 batch-file

对不起, 我会尽力澄清。我的文件中有 3 个命令

   vmrun -T ws -gu "User" -gp "1" start "G:\Virtual Machines\test 1\test 1.vmx"
   vmrun -T ws -gu "User" -gp "1" start "G:\Virtual Machines\test 2\test 2.vmx"
   vmrun -T ws -gu "User" -gp "1" start "G:\Virtual Machines\test 3\test 3.vmx"

当我想从G:\Virtual Machines\test 2\test 2.vmx 开始这个批处理时,脚本正在启动,但跳过了一些命令。我想启动我的批处理文件,例如从第 3 行开始。我试图在 cli 中写一个file.bat 3,但它不起作用。无论是从第一行开始。

【问题讨论】:

    标签: windows batch-file batch-processing


    【解决方案1】:

    您并不清楚条件,所以我向您展示一种方法,您可以随意修改。

    以下是有条件的,它取决于您提供给批处理文件的标准输入。您有以下选择:

    仅运行 VMX1

    batch_file.cmd 1
    

    仅运行 VMX2

    batch_file.cmd 2
    

    仅运行 VMX3

    batch_file.cmd 3
    

    运行所有 VMX 一次

    batch_file.cmd all
    

    在一个永久循环中运行所有 VMX(虽然不知道为什么要这样做)

    batch_file.cmd all loop
    

    然后我们就有了代码。这真的很简单。在大多数情况下,它只评估%1,这将确定您的批处理文件将从哪里开始。 %2 仅在脚本结束时评估一次,在这种情况下,如果需要循环。

    @echo off
    goto vmx%~1
    :start
    :vmxall
    :vmx1
    echo vmrun -T ws -gu "User" -gp "1" start "G:\Virtual Machines\test 1\test 1.vmx"
    if /i not "%~1" == "all" exit /b
    :vmx2
    echo vmrun -T ws -gu "User" -gp "1" start "G:\Virtual Machines\test 2\test 2.vmx"
    if /i not "%~1" == "all" exit /b
    :vmx3
    echo vmrun -T ws -gu "User" -gp "1" start "G:\Virtual Machines\test 3\test 3.vmx"
    if /i not "%~1" == "all" exit /b
    if /i "%~1" == "all" if /i "%~2" == "loop" goto :start
    exit /b
    :vmx
    echo You did not supply any arguments & pause
    

    【讨论】:

    • 对不起,我会尽力澄清。我的文件中有 3 个命令` vmrun -T ws -gu "User" -gp "1" start "G:\Virtual Machines\test 1\test 1.vmx" vmrun -T ws -gu "User" -gp " 1" start "G:\Virtual Machines\test 2\test 2.vmx" vmrun -T ws -gu "User" -gp "1" start "G:\Virtual Machines\test 3\test 3.vmx" 当我想要从“G:\Virtual Machines\test 2\test 2.vmx”开始这个批处理,脚本正在启动,但跳过了一些命令。我想开始我的批次,例如从第 3 行开始。我试图在 cmd 中写一个“file.bat 3”,但它不起作用。无论是从第一行开始
    • 好的,你看到了从任何地方开始的方法,那么你有什么问题?
    • 好的。在我的文件中,我运行 3 个虚拟机。我想从“test 2.vmx”开始运行批处理。我的原始文件有很多行。例如..
    【解决方案2】:

    批处理文件中的标签可以满足您的需求。

    你可以试试这个,以防你希望代码只为第三个vmrun命令执行:

    goto open
    :start
    vmrun -T ws -gu "User" -gp "1" start "G:\Virtual Machines\test 1\test 1.vmx"
    vmrun -T ws -gu "User" -gp "1" start "G:\Virtual Machines\test 2\test 2.vmx"
    :open
    vmrun -T ws -gu "User" -gp "1" start "G:\Virtual Machines\test 3\test 3.vmx"
    exit /b
    goto start
    

    或者你也可以试试这个,以防你想为第三个vmrun命令执行代码,然后为剩下的两个vmx执行代码:

    goto open
    :start
    vmrun -T ws -gu "User" -gp "1" start "G:\Virtual Machines\test 1\test 1.vmx"
    vmrun -T ws -gu "User" -gp "1" start "G:\Virtual Machines\test 2\test 2.vmx"
    exit /b
    :open
    vmrun -T ws -gu "User" -gp "1" start "G:\Virtual Machines\test 3\test 3.vmx"
    goto start
    

    【讨论】:

    • 不过有一个问题。您将从open 开始,但不久之后,它会遇到goto start,它将运行所有3 个vmx,并将再次运行vmx3。我明白你只是想展示标签的概念,但你明白我的意思:)
    • 好吧,由于问题不清楚,我尝试了一些方法,无论如何我赞成你的答案,因为它更准确
    • 您只需将exit /b 放在goto start 之前即可修复您的问题
    • 也许会创建另一个代码块。作为第二个选项,但不要在goto start之前添加exit /b,而是在:open之前添加它所以如果它运行它将在打开时启动,运行vmx 3,转到启动并且只运行vmx1和vmx 2。OP然后两者都有可供选择。
    • 现已全部实施
    猜你喜欢
    • 1970-01-01
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多