从特定行开始批处理文件

Posted

技术标签:

【中文标题】从特定行开始批处理文件【英文标题】: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,但它不起作用。无论是从第一行开始。

【问题讨论】:

【参考方案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然后两者都有可供选择。 现已全部实施

以上是关于从特定行开始批处理文件的主要内容,如果未能解决你的问题,请参考以下文章

将文本文件中的特定行读取到批处理文件中的变量

python中Excel文件处理库-openpyxl的使用

使用批处理脚本读取文本文件并以不同的顺序将特定文本复制到新的文本文件中[关闭]

有人可以解释这个从档案中提取特定文件的批处理代码吗

如何从批处理脚本中获取特定的标准输出以重定向到文本文件

Android 逆向ELF 文件格式 ( 程序头偏移量 | 节区头偏移量 | 处理器特定标志 | ELF 文件头大小 )