Batch file 批处理文件中的条件语句

Batch file 批处理文件中的条件语句,batch-file,Batch File,我已经编写了一个运行一系列命令的MS DOS批处理文件 每个命令都使用一些特定参数调用一个程序。为了实现自动化,我组合了所有命令 批处理文件的结构如下所示: @echo off if %1 == "b1" ( command 1 command 2 command 3 .... ) else ( command a command b command c ) test.bat b1 @echo off command a command b command c 我调用它如下所示: @ech

我已经编写了一个运行一系列命令的MS DOS批处理文件

每个命令都使用一些特定参数调用一个程序。为了实现自动化,我组合了所有命令

批处理文件的结构如下所示:

@echo off
if %1 == "b1" (
command 1
command 2
command 3
....
) else (
command a
command b
command c
)
test.bat b1
@echo off
command a
command b
command c
我调用它如下所示:

@echo off
if %1 == "b1" (
command 1
command 2
command 3
....
) else (
command a
command b
command c
)
test.bat b1
@echo off
command a
command b
command c
如果我将b1作为参数传递给批处理文件,它将处理一系列命令,命令1、命令2、命令3等等

类似地,如果要执行else部分中提到的一系列命令,我将传递另一个参数:

test.bat abc
由于传递给批处理文件的参数不等于b1,它将开始执行批处理文件的else部分。这里我传递的参数(在本例中为abc)是命令、命令a、命令b、命令c等所必需的参数

所有这些都很有效

但是,我面临的问题是,如果我想在两者之间终止批处理文件(按Ctrl+C),它不会提示我选项:是否要终止批处理操作?是/否

例如,假设批处理文件正在处理else部分中的一系列命令。当前,假设它正在执行命令a。如果我按Ctrl+C,那么它不会提示我取消操作,而是取消命令a的执行,并自动继续执行命令b。如果我再次按Ctrl+C,它将取消命令b并继续执行命令C,依此类推

另一方面,如果我编写批处理文件,如下所示:

@echo off
if %1 == "b1" (
command 1
command 2
command 3
....
) else (
command a
command b
command c
)
test.bat b1
@echo off
command a
command b
command c
我从命令行调用它,如下所示:

test.bat abc
现在,当我在执行批处理文件时按Ctrl+C时,它会提示我按预期取消批处理操作

看起来,当我在批处理文件中添加条件语句时,Ctrl+C的功能会以某种方式被修改

如何解决此问题


谢谢。

我试过这个,它似乎像预期的那样工作:

@echo off
if "x%1x" == "xb1x" (
    echo yes it is
    dir
    ...
) else (
    echo no it is not
    dir
    ...
)
(其中,
将前一对行重复100次,以便有时间按Ctrl-C)。我确实得到了提示,即使中断发生在
if
中<代码>其他


因此,我怀疑您正在运行的命令有一些不寻常的地方,而
if
行为是一种误导。特别是,当您说他们正在启动程序时,我希望Ctrl-C直接传递给正在运行的程序,而不是传递给启动它的批处理文件。

单击关闭窗口图标而不是按control C。或者阅读
CMD/?
中的帮助,查看是否可以更改控件C/中断处理。使用
start”“/b/w command1
可能会起作用。谢谢。是的,似乎Ctrl+C被传递到批处理文件中我正在调用的程序,而不是提示我终止批处理操作。因此,它是特定于我正在运行的程序的。