在Windows中,与$符号等价的是什么?

12

有没有人知道Windows命令行中等价于$?的变量?是否存在这样的变量?

编辑:$?是UNIX变量,它保存了上一个进程的退出代码。


没有一些上下文,这个问题就没有意义。 - Cody C
你不应该给这个打上Windows的标签吗? - Duck
他正在谈论Unix shell变量,该变量保存了上一个进程的退出代码。 - Chuck
你是指查找已登录的用户吗? - northpole
@Duck:抱歉,我的键盘出了问题,所以在尝试从建议列表中选择时,不小心发送了一些错误的TAB+ENTER组合。@birdlips:不,我没有。刚刚更新了问题。 - victor hugo
5个回答

14

11

Windows批处理文件

%ERRORLEVEL% 返回最近使用命令的错误代码。非零值通常表示错误。

http://technet.microsoft.com/en-us/library/bb490954.aspx

Windows Powershell

$? 如果上一操作成功,则包含True,否则为False。并且

$LASTEXITCODE 包含上一个Win32可执行文件执行的退出代码。

http://blogs.msdn.com/powershell/archive/2006/09/15/ErrorLevel-equivalent.aspx

Cygwin Bash脚本

$? 扩展为最近执行的前台程序的退出状态代码。

http://unix.sjcc.edu/cis157/BashParameters.htm


3

很抱歉翻出一个老的帖子,但值得注意的是%ERRORLEVEL%并没有在每个命令中被重置。即使经过几行后续且成功的批处理代码,您仍然可以测试“正面”的错误级别。

您可以使用ver可靠地将errorlevel重置为干净的状态。此示例适用于UnxUtils以获取更类似Linux的目录列表。尽管看起来在最后进行重置可能是多余的,但如果我需要从另一个脚本中调用此脚本,则不是如此。

:------------------------------------------------------------------------------
:  ll.bat - batch doing its best to emulate UNIX
:  Using UnxUtils when available, it's nearly unix.
:------------------------------------------------------------------------------
:  ll.bat - long list: batch doing its best to emulate UNIX
:  ------------------------------------
:  zedmelon, designer, 2005 | freeware
:------------------------------------------------------------------------------
@echo off
    setlocal
    : use the UnxUtil ls.exe if it is in the path
    ls.exe -laF %1 2>nul

if errorlevel 1 (
    echo.
    echo ----- ls, DOS-style, as no ls.exe was found in the path -----
    echo.
    dir /q %1
    )

: reset errorlevel
    ver>nul 
    endlocal

请随意使用。如果您还没有看过UnxUtils,请查看它们。


1
@echo off
run_some_command
if errorlevel 2 goto this
if errorlevel 1 goto that
goto end

:this
echo This
goto end

:that
echo That
goto end

:end

请注意,“if errorlevel”操作测试errorlevel变量是否等于或大于给定数字。因此,如果您需要测试多个可能的值,则必须按递减顺序检查数字(如示例所示)。 - nobody

0

%错误级别%


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接