MS-DOS内置命令是否返回错误\退出代码?

时间:2011-06-28 00:08:17

标签: batch-file dos windows-scripting

我还没有找到一种方法来获取rmdir的错误代码(如果返回)。好像MS-DOS内部命令不会返回错误代码。有人可以证实吗?

使用这些命令的脚本如何知道命令是成功还是失败以决定下一步?最简单的方法是读取它们的返回代码(如果已返回)。

提前致谢。

4 个答案:

答案 0 :(得分:16)

不,似乎没有。如果您在echo %errorlevel%成功或失败后rmdir,则在以下两种情况下都会获得0

c:\pax> mkdir qqq
c:\pax> rmdir qqq
c:\pax> echo %errorlevel%
0
c:\pax> rmdir qqq
The system cannot find the file specified.
c:\pax> echo %errorlevel%
0

对于特定的用例,您最好在之后检查目录是否存在:

if exist dodgy\. rmdir dodgy
if exist dodgy\. echo dodgy directory still exists

有趣的是,如果您调用cmd.exe单独的副本来执行操作,则可以获得错误级别:

c:\pax> mkdir qqq
c:\pax> cmd /c rmdir qqq
c:\pax> echo %errorlevel%
0
c:\pax> cmd /c rmdir qqq
The system cannot find the file specified.
c:\pax> echo %errorlevel%
2

但是,我不相信在删除目录后只需检查目录是否已经消失,因为它需要您启动一个全新的命令解释程序。

答案 1 :(得分:5)

md test
2>nul rmdir test&&echo ok||echo err
2>nul rmdir test&&echo ok||echo err

这可以打印第一个rmdir,错误打印第二个。

rmdir是一个内部cmd.exe命令,因此%errorlevel%可能不会更新。

答案 2 :(得分:4)

rmdir在成功或失败时返回0。它似乎很直观,它应该返回一个错误代码。但是,其他内部命令(至少我测试过的mkdir和dir命令)。

答案 3 :(得分:0)

他们这样做,很难找到特定命令的文档,但这里证明了rmdir(根据MS文档here 的证据不返回退出代码) 实际设置退出代码

$process = Start-Process -FilePath "cmd" -ArgumentList "/c rmdir /q /s C:\folder\unexistingfolder" -NoNewWindow -PassThru -Wait
$process.ExitCode

如果目录不存在,则输出为2,还有其他代码用于权限问题等。