- 批处理脚本教程
- 批处理脚本 - 首页
- 批处理脚本 - 概述
- 批处理脚本 - 环境
- 批处理脚本 - 命令
- 批处理脚本 - 文件
- 批处理脚本 - 语法
- 批处理脚本 - 变量
- 批处理脚本 - 注释
- 批处理脚本 - 字符串
- 批处理脚本 - 数组
- 批处理脚本 - 决策
- 批处理脚本 - 运算符
- 批处理脚本 - 日期和时间
- 批处理脚本 - 输入/输出
- 批处理脚本 - 返回代码
- 批处理脚本 - 函数
- 批处理脚本 - 进程
- 批处理脚本 - 别名
- 批处理脚本 - 设备
- 批处理脚本 - 注册表
- 批处理脚本 - 网络
- 批处理脚本 - 打印
- 批处理脚本 - 调试
- 批处理脚本 - 日志记录
- 批处理脚本资源
- 批处理脚本 - 快速指南
- 批处理脚本 - 有用资源
- 批处理脚本 - 讨论
批处理脚本 - 返回代码
默认情况下,命令行执行完成后,应在执行成功时返回零,在执行失败时返回非零值。当批处理脚本执行失败后返回非零值时,非零值将指示错误号。然后,我们将使用错误号来确定错误是什么,并相应地解决它。
以下是常见的退出代码及其描述。
错误代码 | 描述 |
---|---|
0 | 程序成功完成。 |
1 | 函数不正确。指示Action尝试在Windows命令提示符cmd.exe中执行未识别的命令。 |
2 | 系统找不到指定的文件。指示在指定位置找不到该文件。 |
3 | 系统找不到指定的路径。指示找不到指定的路径。 |
5 | 拒绝访问。指示用户无权访问指定的资源。 |
9009 0x2331 |
程序不被识别为内部或外部命令、可操作程序或批处理文件。指示在配置Action时拼写错误了命令、应用程序名称或路径。 |
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。同样,如果我们看到用户配置文件变量未定义,则应将错误级别代码设置为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之后,它实际上会检查错误级别是否大于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语句通常用于循环结构中,用于导致立即终止最内层的封闭循环。 |