我还没有找到获取rmdir 的错误代码(如果返回)的方法。似乎 MS-DOS 内部命令不返回错误代码。有人可以确认吗?
使用这些命令的脚本如何知道命令是成功还是失败以决定下一步?最简单的方法是读取他们的返回码,如果返回的话。
提前致谢。
我还没有找到获取rmdir 的错误代码(如果返回)的方法。似乎 MS-DOS 内部命令不返回错误代码。有人可以确认吗?
使用这些命令的脚本如何知道命令是成功还是失败以决定下一步?最简单的方法是读取他们的返回码,如果返回的话。
提前致谢。
不,似乎没有。如果你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
但是,我不相信这比在删除目录后简单地检查目录是否消失更好,因为它需要您启动一个全新的命令解释器。
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% 可能没有更新。
rmdir 在成功或失败时返回 0。它应该返回一个错误代码似乎很直观。但是,其他内部命令可以(至少我测试过的 mkdir 和 dir 命令)。
他们这样做了,很难找到特定命令的文档,但这里有证据证明rmdir
(根据这里的 MS 文档 不返回退出代码)实际上设置了退出代码:
$process = Start-Process -FilePath "cmd" -ArgumentList "/c rmdir /q /s C:\folder\unexistingfolder" -NoNewWindow -PassThru -Wait
$process.ExitCode
输出将是2
如果目录不存在,还有其他代码用于权限问题等。