批处理文件 - MS-DOS 内置命令是否返回错误退出代码



我还没有找到获取rmdir的错误代码(如果返回(的方法。似乎MS-DOS内部命令不返回错误代码。有人可以证实这一点吗?

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

提前谢谢。

不,似乎不是。如果您在成功或失败的rmdirecho %errorlevel%,则在这两种情况下都会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

但是,我不相信这比简单地检查目录在删除后是否消失更好,因为它需要您启动一个全新的命令解释器。

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

对于第一个 rmdir,这打印正常,第二个打印错误。

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

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

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

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

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

最新更新