HOWTO · Batch

在批处理脚本中运行 CMD 命令

本教程将讨论如何在批处理脚本中运行 CMD 命令。

本页内容

Windows 批处理文件是一个按顺序运行 CMD 命令的文本文件,可将重复步骤保存起来,一次运行。每条命令单独占一行,将文件保存为 .bat 或 .cmd 扩展名,然后在文件资源管理器中启动,或从命令提示符运行。命令顺序很重要:使用某个文件夹或文件的命令,必须放在创建该文件夹或文件,或切换到相应位置的步骤之后。

批处理脚本如何运行 CMD 命令

CMD 从上到下读取批处理文件,并将每一行作为命令处理。@echo off 会在命令运行时隐藏命令本身,但不会隐藏 echo 打印的文本。下面可运行的 shell 示例会打印相同的消息;在 .bat 或 .cmd 文件中,等效的 CMD 命令是 echo Batch commands run in order.

运行此示例:

本节中的代码以及显示的标签或输出仍为英文。

printf '%s\n' 'Batch commands run in order.'
Batch commands run in order.

运行 shell 示例时,printf 会将消息打印到标准输出。在 Windows 批处理文件中,等效的 echo 命令会在命令提示符窗口中打印消息。这个示例刻意保持简短;需要执行更多步骤时,可将其他 CMD 命令分别放在不同的行上。

将命令放入批处理文件

打开纯文本编辑器,按预期的执行顺序输入命令,并使用描述性名称保存文件,例如 daily-task.bat。.bat 和 .cmd 扩展名都表示 Windows 命令脚本。确认编辑器保存了所选扩展名,没有悄悄再附加文本文件扩展名。

较长的任务应按顺序排列相互依赖的命令。例如,使用 set "WORK_DIR=%TEMP%\BatchDemo" 定义一个可重复使用的文件夹,通过 if not exist "%WORK_DIR%" mkdir "%WORK_DIR%" 创建它,再用 cd /d "%WORK_DIR%" 切换到该文件夹,然后用 echo Batch file ran successfully.>status.txt 写入状态文件,并用 type status.txt 显示文件内容。mkdir 必须先于 cd,这样脚本切换到该文件夹时,它已经存在。必要时,cd /d 会同时更改当前驱动器和目录;给变量加引号可以让含空格的路径保持为一个整体。这些都是脚本命令;它们的具体效果取决于运行批处理文件的 Windows 环境。

运行批处理文件

在文件资源管理器中,双击保存的批处理文件即可启动它。若要在已打开的命令提示符窗口中运行,请使用 cd /d 切换到文件所在文件夹,然后输入文件名。如果文件位于其他位置,可输入带引号的完整路径,例如 "C:\Users\Sam\Scripts\daily-task.bat";请将示例路径替换为电脑上的实际位置。

从命令提示符运行,便于在脚本执行过程中查看消息或排查问题。pause 命令会等待按键,但如果运行文件的窗口会保持打开,通常不需要它。排查问题时,也可以暂时省略 @echo off,以查看 CMD 正在处理的每条命令。

使用变量和条件

变量用于存储可重复使用的值。在批处理文件中,使用 set "NAME=value" 定义变量,并用 %NAME% 引用它。带引号的赋值形式可避免值的前后意外包含空格。上面的示例将文件夹路径保存在 WORK_DIR 中,并在多条命令里使用它,因此只需在一个位置更改文件夹,就能更新这些引用。

如果后续命令应根据某个条件执行,可以使用 if 语句。例如,if exist "%WORK_DIR%\status.txt" echo Status file found 只会在该文件存在时显示消息。如果满足条件后需要一起执行多条操作,可将这些命令放在条件后面的括号中。条件和命令中的路径都应加引号,以免文件夹名称中的空格将路径拆成多个参数。

检查常见问题

如果脚本无法启动,请确认保存的文件名以 .bat 或 .cmd 结尾,并检查编辑器是否额外添加了其他扩展名。如果 CMD 提示找不到路径,请核对文件夹名称,并确保创建目录的步骤排在进入或使用该目录的命令之前。含空格的路径要加引号。

如果窗口在你读完消息前就关闭,请从命令提示符运行文件,或在排查问题时添加 pause。如果命令的行为与预期不同,可在 CMD 中逐条运行命令,并将其顺序和路径与批处理文件中的内容对照。把重复命令放在一起,能让日常 Windows 任务更容易执行,也更便于一致地更新。