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

如果我将 b1 作为参数传递给批处理文件,它将处理一系列命令,命令 1、命令 2、命令 3 等等。

同样,如果我想执行else部分提到的一系列命令,我传递另一个参数:

test.bat abc

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

这一切都很好。

但是,我面临的问题是,如果我想在中间终止批处理文件(通过按 Ctrl + C),它不会提示我选项:Do you want to Terminate the Batch operation?是/否

例如,批处理文件正在处理 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 的功能以某种方式被修改。

我该如何解决这个问题?

谢谢。

最佳答案

我试过了,它似乎按预期工作:

@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 直接传递给正在运行的程序,而不是传递给启动它的批处理文件。

关于batch-file - 批处理文件中的条件语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16662943/

相关文章:

python - Peewee 安装错误 : unable to find vcvarsall. bat - Microsoft server 2012 R2

batch-file - 从批处理文件为 exe 创建快捷方式

python - 双击运行Python文件

batch-file - 如何比较批处理脚本中文件的时间戳?

c# - Windows 服务更改批处理文件中回显/流重定向的行为

java - 通过批处理脚本执行java程序

windows - Windows 批处理脚本中的 %1 和 %1% 有区别吗?

Windows 批处理文件 - 系统找不到指定的批处理标签

windows - 批量删除文件名中的括号

windows - 如何使用 Batch 添加 REG_NONE 空值?