我还没有找到一种获取rmdir返回的错误代码的方法。似乎MS-DOS内部命令不会返回错误代码,能否有人确认一下?
如果这些命令成功或失败,脚本应该如何知道下一步该怎么做呢?最简单的方法是读取它们的返回代码(如果有的话)。
提前感谢您的帮助。
我还没有找到一种获取rmdir返回的错误代码的方法。似乎MS-DOS内部命令不会返回错误代码,能否有人确认一下?
如果这些命令成功或失败,脚本应该如何知道下一步该怎么做呢?最简单的方法是读取它们的返回代码(如果有的话)。
提前感谢您的帮助。
rmdir
之后执行echo %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
但是,我并不认为这比在删除目录后检查目录是否存在更好,因为它需要您启动一个全新的命令解释器。
rmdir dodgy
失败,但是有一个名为 "dodgy" 的文件,那么你就有麻烦了 :) 要测试目录是否存在,请使用:if exist "dodgy\."
。 - huysentruitwmd 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
(根据微软文档此处,不会返回退出代码)实际上设置了退出代码:
$process = Start-Process -FilePath "cmd" -ArgumentList "/c rmdir /q /s C:\folder\unexistingfolder" -NoNewWindow -PassThru -Wait
$process.ExitCode
如果目录不存在,输出将为2
,如果存在权限问题等其他代码。