批处理脚本 – 返回代码

批处理脚本 – 返回代码


默认情况下,当命令行执行完成时,它应该要么在执行成功时返回零,要么在执行失败时返回非零。当批处理脚本在执行失败后返回非零值时,非零值将指示错误号是多少。然后我们将使用错误编号来确定错误的内容并相应地解决它。

以下是常见的退出代码及其说明。

Error Code 描述
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的文件,那么我们应该将errorlevel设置为7。同样,如果我们看到变量userprofile没有定义,那么我们应该将errorlevel代码设置为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 不存在,则控制台输出中将不显示任何内容。

  • 如果上述两个条件都通过,则命令提示符中将显示字符串“成功完成”。

循环

在决策制定一章中,我们已经看到以顺序方式一个接一个执行的语句。此外,还可以在批处理脚本中完成实现以改变程序逻辑中的控制流。然后将它们分类为控制语句流。

S.No 循环和描述
1 While Statement Implementation

批处理脚本中没有直接的 while 语句,但我们可以通过使用 if 语句和标签很容易地实现这个循环。

2 For Statement – List Implementations

“FOR”构造为批处理文件提供循环功能。以下是用于处理值列表的“for”语句的常见构造。

3 Looping through Ranges

‘for’ 语句还可以在一系列值之间移动。以下是声明的一般形式。

4 Classic for Loop Implementation

以下是大多数编程语言中都可用的经典“for”语句。

循环遍历命令行参数

‘for’ 语句也可用于检查命令行参数。以下示例显示如何使用 ‘for’ 语句循环遍历命令行参数。

例子

&commatECHO 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

S.No 循环和描述
1 Break Statement Implementation

break 语句用于在任何编程语言中改变循环内的控制流。break 语句通常用于循环结构中,用于立即终止最内层的封闭循环。

觉得文章有用?

点个广告表达一下你的爱意吧 !😁