批处理文件在第一个命令后停止运行

raj*_*kar 70 file batch-file

我正在使用'HTML Match'工具来比较两个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"
Run Code Online (Sandbox Code Playgroud)

当我在cmd提示符中执行此批处理文件时,只比较第一行,即只有'a1.html',并生成结果.然后执行停止.

Ben*_*Ben 108

添加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
Run Code Online (Sandbox Code Playgroud)

  • 我的意思是在你写的每一行前面加上“call”(可能除了“cd”)。 (2认同)

小智 55

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

  • 我今天用5年时间编写了我的第一个批处理文件,并遇到了同样的问题.如果有人想知道,添加"call"有帮助的原因是因为直接从第一个批处理文件中调用第二个批处理文件会导致第二个批处理文件替换解释器中的第一个批处理文件.当第二个批处理文件退出时,解释器将忘记您调用的原始批处理文件的所有内容.call命令使解释器跟踪调用的bbatch文件所在的位置,并在被调用的批处理文件退出时返回. (25认同)
  • @Aacini 似乎某些可执行文件会以奇怪的退出代码退出,从而阻止批处理文件的其余部分运行,在这种情况下,使用 CALL 在不同的批处理文件中运行它的解决方法有效。 (3认同)
  • @MarkBessey:是的,从第一个批处理文件中调用**第二个批处理文件** 时您是完全正确的,但这里的情况并非如此,因为调用的程序是一个 .EXE 并且它不需要`CALL`! (2认同)