我编写了一个运行一系列命令的MS DOS批处理文件。
每个命令都会调用带有一些特定参数的程序。为了实现自动化,我将所有命令组合在一起。
批处理文件的结构如下所示:
@echo off
if %1 == "b1" (
command 1
command 2
command 3
....
) else (
command a
command b
command c
)
我调用它如下所示:
test.bat b1
如果我将b1作为参数传递给批处理文件,它将处理一系列命令,命令1,命令2,命令3等。
同样,如果我想执行else部分中提到的一系列命令,我会传递另一个参数:
test.bat abc
由于传递给批处理文件的参数不等于b1,因此它将开始执行批处理文件的else部分。这里我传递的参数(在本例中为abc)是命令,命令a,命令b,命令c等作为参数所必需的。
这一切都很好。
但是,我面临的问题是,如果我想在其间终止批处理文件(通过按Ctrl + C),它不会提示我选项:是否要终止批处理操作? Y / N
例如,假设批处理文件正在处理else部分中的一系列命令。目前,假设它正在执行命令a。如果按Ctrl + C,则不会提示我取消操作,而是取消执行命令a并自动继续执行命令b。如果我再次按Ctrl + C,它将取消命令b并继续执行命令c,依此类推。另一方面,如果我按如下所示编写批处理文件:
@echo off
command a
command b
command c
我从命令行调用它:
test.bat abc
现在,当我在执行批处理文件时按Ctrl + C时,它会提示我按预期取消批处理操作。
当我在批处理文件中添加条件语句时,似乎以某种方式修改了Ctrl + C的功能。
如何解决此问题?
感谢。
答案 0 :(得分:2)
我尝试了这个,它似乎按预期工作:
@echo off
if "x%1x" == "xb1x" (
echo yes it is
dir
...
) else (
echo no it is not
dir
...
)
(其中...
重复前一对100次,让你有时间按 Ctrl - C )。我做了获取提示,即使在if
... else
内发生了中断。
所以我怀疑你正在运行的命令有些不寻常,if
行为是一个红色的鲱鱼。特别是,正如你所说他们正在启动程序,我希望 Ctrl - C 直接传递给正在运行的程序而不是启动它的批处理文件。