【问题标题】:Batch file stops running after the first command批处理文件在第一个命令后停止运行
【发布时间】:2011-09-06 12:39:21
【问题描述】:

我正在使用“HTML 匹配”工具来比较两个 HTML 文件。由于我必须比较许多文件,因此我创建了一个如下所示的批处理文件。比如我只给了五组文件。

cd "C:\Program Files\HTML Match"
HTMLMATCH.EXE "D:\Raj\compare1\a1.html" "D:\Raj\compare2\a1.html" "D:\Raj\compare_res\a1.html"
HTMLMATCH.EXE "D:\Raj\compare1\a2.html" "D:\Raj\compare2\a2.html" "D:\Raj\compare_res\a2.html"
HTMLMATCH.EXE "D:\Raj\compare1\a3.html" "D:\Raj\compare2\a3.html" "D:\Raj\compare_res\a3.html"
HTMLMATCH.EXE "D:\Raj\compare1\a4.html" "D:\Raj\compare2\a4.html" "D:\Raj\compare_res\a4.html"
HTMLMATCH.EXE "D:\Raj\compare1\a5.html" "D:\Raj\compare2\a5.html" "D:\Raj\compare_res\a5.html"

当我在 cmd 提示符下执行这个批处理文件时,只有第一行,即只有 'a1.html',被比较并产生结果。然后执行停止。

【问题讨论】:

    标签: file batch-file


    【解决方案1】:

    在您正在运行的命令前添加call

    您也可以将其更改为 for 循环,因此:

    FOR /L %%i in (1,1,5) DO CALL HTMLMATCH.EXE D:\Raj\compare%%i%%\a%%i%%.html D:\Raj\compare%%i%%\a%%i%%.html D:\Raj\compare_res\a%%i%%.html
    

    【讨论】:

    • 你的意思是在我给出的每一行前面“调用”还是只是调用 xyz.bat ?
    • 我的意思是 call 在你写的每一行前面(可能除了 cd )。
    • 文件名可能会从此格式更改为其他名称。如果指定了文件夹路径,有没有办法读取文件名,然后为每个文件名执行它
    • 是的,for 循环会这样做。改变你需要的。在 cmd 窗口中键入 help for 以找出您需要的内容。添加call 有帮助吗?
    【解决方案2】:

    您的问题的答案是写CALL HTMLMATCH.EXE(以及其余参数)。 只需在批处理文件中的每个可执行命令前使用CALL

    【讨论】:

    • 今天我在大约 5 年内编写了我的第一个批处理文件,并遇到了同样的问题。如果有人想知道,添加“调用”的原因是因为直接从第一个批处理文件中调用第二个批处理文件会导致第二个批处理文件替换解释器中的第一个批处理文件。当第二个批处理文件退出时,解释器将忘记您调用的原始批处理文件。 call 命令使解释器跟踪调用 bbatch 文件的中断位置,并在被调用的批处理文件退出时返回。
    • @MarkBessey:是的,当您从第一个批处理文件中调用 第二个批处理文件 时,您是绝对正确的,但这里的情况并非如此,因为调用的程序是一个 . EXE,它不需要CALL!
    • 这是真的,但我认为有相关问题的解决方案是值得的,因为这是通过在此处搜索更常见的问题得到的结果。我也想不出所描述的行为会发生任何其他方式,所以我想知道描述是否缺少一些细节。
    • @Aacini 似乎某些可执行文件以奇怪的退出代码退出,阻止批处理文件的其余部分运行,在这种情况下,使用 CALL 在不同的批处理文件中运行它的解决方法有效。
    【解决方案3】:

    我一直在寻找非常相似的东西并尝试了,我想,所有的回复都留在这里,但我终于找到了解决问题的方法!!

    在我的脚本中,我想检查一个进程是否正在运行,如果没有,启动它(一个 .exe),然后检查另一个进程是否正在运行,如果没有,也启动它(但让所有程序保持打开状态)和问题是第一个 .exe 已启动,但没有移动到第二个,因为它一直在等待进程结束。 start 终于为我工作了,魔法随之而来......

    /分开

    它适用于我:

    start "program1" /separate program1.exe
    other commands
    

    在启动 program1 后它停止之前,因为它一直在等待它关闭,我想,但这不会发生,因为我想让它保持打开状态。 现在使用 start /separate 继续执行其他命令。

    我在another forum 中找到了它,但问题是它是手册,/separate 用于在另一个内存空间中启动。

    【讨论】:

      【解决方案4】:

      您不必在没有空格的地方插入引号。

      试试看:

      HTMLMATCH.EXE D:\Raj\compare1\a1.html D:\Raj\compare2\a1.html D:\Raj\compare_res\a1.html
      

      也许它会解决你的问题。

      【讨论】:

        猜你喜欢
        • 2016-10-06
        • 1970-01-01
        • 2011-06-10
        • 2023-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-21
        • 2012-10-27
        相关资源
        最近更新 更多