8

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

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

提前致谢。

4

4 回答 4

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

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

于 2011-06-28T00:24:00.843 回答
5
md test
2>nul rmdir test&&echo ok||echo err
2>nul rmdir test&&echo ok||echo err

这对于第一个 rmdir 打印 ok,对于第二个打印 err。

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

于 2011-06-28T13:24:37.213 回答
4

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

于 2011-06-28T00:27:06.443 回答
0

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

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

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

于 2016-02-04T20:48:07.493 回答