- 批处理脚本教程
- 批处理脚本 - 主页
- 批处理脚本 - 概述
- 批处理脚本 - 环境
- 批处理脚本 - 命令
- 批处理脚本 - 文件
- 批处理脚本 - 语法
- 批处理脚本 - 变量
- 批处理脚本 - 注释
- 批处理脚本 - 字符串
- 批处理脚本 - 数组
- 批处理脚本 - 决策
- 批处理脚本 - 运算符
- 批处理脚本 - 日期和时间
- 批处理脚本 - 输入/输出
- 批处理脚本 - 返回代码
- 批处理脚本 - 函数
- 批处理脚本 - 进程
- 批处理脚本 - 别名
- 批处理脚本 - 设备
- 批处理脚本 - 注册表
- 批处理脚本 - 网络
- 批处理脚本 - 打印
- 批处理脚本 - 调试
- 批处理脚本 - 日志记录
- 批处理脚本资源
- 批处理脚本 - 快速指南
- 批处理脚本 - 有用的资源
- 批处理脚本 - 讨论
批处理脚本 - 返回代码
默认情况下,当命令行执行完成时,执行成功时应返回零,执行失败时应返回非零。当批处理脚本执行失败后返回非零值时,该非零值将指示错误号是多少。然后,我们将使用错误号来确定错误的原因并相应地解决它。
以下是常见的退出代码及其说明。
错误代码 | 描述 |
---|---|
0 | 计划顺利完成。 |
1 | 功能不正确。指示操作尝试在 Windows 命令提示符 cmd.exe 中执行无法识别的命令。 |
2 | 该系统找不到指定的文件。表示在指定位置找不到该文件。 |
3 | 该系统找不到指定的路径。表示找不到指定的路径。 |
5 | 访问被拒绝。表示用户没有指定资源的访问权限。 |
9009 0x2331 |
程序不被识别为内部或外部命令、可操作程序或批处理文件。指示配置操作时命令、应用程序名称或路径拼写错误。 |
221225495 0xC0000017 -1073741801 |
没有足够的虚拟内存可用。 它表明 Windows 内存不足。 |
3221225786 0xC000013A -1073741510 |
应用程序因 CTRL+C 而终止。指示应用程序已通过用户键盘输入 CTRL+C 或 CTRL+Break 或关闭命令提示符窗口终止。 |
3221225794 0xC0000142 -1073741502 |
该应用程序未能正确初始化。指示应用程序已在当前用户无访问权限的桌面上启动。另一个可能的原因是 gdi32.dll 或 user32.dll 初始化失败。 |
错误级别
环境变量 %ERRORLEVEL% 包含最后执行的程序或脚本的返回代码。
默认情况下,检查 ERRORLEVEL 的方法是通过以下代码。
句法
IF %ERRORLEVEL% NEQ 0 ( DO_Something )
通常在批处理文件末尾使用命令 EXIT /B %ERRORLEVEL% 从批处理文件返回错误代码。
批处理文件末尾的 EXIT /B 将停止批处理文件的执行。
在批处理文件末尾使用 EXIT /B < exitcodes > 可返回自定义返回代码。
环境变量 %ERRORLEVEL% 包含批处理文件中的最新错误级别,即上次执行的命令的最新错误代码。在批处理文件中,使用环境变量而不是常量值始终是一个好习惯,因为相同的变量在不同的计算机上会扩展为不同的值。
让我们看一个有关如何从批处理文件中检查错误代码的简单示例。
例子
假设我们有一个名为 Find.cmd 的批处理文件,其中包含以下代码。在代码中,我们已经明确提到,如果没有找到名为lists.txt的文件,那么我们应该将错误级别设置为7。同样,如果我们看到变量userprofile没有定义,那么我们应该将错误级别代码设置为9.
if not exist c:\lists.txt exit 7 if not defined userprofile exit 9 exit 0
假设我们有另一个名为 App.cmd 的文件,它首先调用 Find.cmd。现在,如果 Find.cmd 返回一个错误,其中它将错误级别设置为大于 0,那么它将退出程序。在下面的批处理文件中,调用 Find.cnd find 后,它实际上检查 errorlevel 是否大于 0。
Call Find.cmd if errorlevel gtr 0 exit echo “Successful completion”
输出
在上面的程序中,我们可以将以下场景作为输出 -
如果文件 c:\lists.txt 不存在,则控制台输出中不会显示任何内容。
如果变量 userprofile 不存在,则控制台输出中不会显示任何内容。
如果上述两个条件都满足,则命令提示符中将显示字符串“成功完成”。
循环
在决策一章中,我们看到了以顺序方式一个接一个执行的语句。此外,还可以在批处理脚本中完成实现,以改变程序逻辑中的控制流。然后将它们分类为控制语句流。
序列号 | 循环和描述 |
---|---|
1 | While 语句实现
批处理脚本中没有直接的 while 语句,但我们可以通过使用 if 语句和标签非常轻松地实现此循环。 |
2 | For 语句 - 列表实现
“FOR”结构为批处理文件提供循环功能。以下是用于处理值列表的“for”语句的常见结构。 |
3 | 循环范围
“for”语句还能够在一系列值之间移动。以下是声明的一般形式。 |
4 | 经典的 for 循环实现
以下是大多数编程语言中都可用的经典“for”语句。 |
循环遍历命令行参数
“for”语句也可用于检查命令行参数。以下示例显示如何使用“for”语句循环遍历命令行参数。
例子
@ECHO OFF :Loop IF "%1"=="" GOTO completed FOR %%F IN (%1) DO echo %%F SHIFT GOTO Loop :completed
输出
假设上面的代码存储在名为 Test.bat 的文件中。如果批处理文件将命令行参数 1,2 和 3 作为 Test.bat 1 2 3 传递,则上述命令将产生以下输出。
1 2 3
序列号 | 循环和描述 |
---|---|
1 | Break语句的实现
Break 语句用于改变任何编程语言中循环内部的控制流。Break 语句通常用在循环结构中,用于立即终止最内层的封闭循环。 |