我正在写一个批处理(.bat)脚本,我需要处理在一个文件夹的删除失败的情况下。 我使用%errorlevel%
搭上退出代码,但在的情况下, rd
命令似乎不工作:
C:\Users\edo\Desktop>rd testdir
Directory is not empty
C:\Users\edo\Desktop>echo %errorlevel%
0
为什么? 你有什么建议?
我正在写一个批处理(.bat)脚本,我需要处理在一个文件夹的删除失败的情况下。 我使用%errorlevel%
搭上退出代码,但在的情况下, rd
命令似乎不工作:
C:\Users\edo\Desktop>rd testdir
Directory is not empty
C:\Users\edo\Desktop>echo %errorlevel%
0
为什么? 你有什么建议?
哇,这是我见过的第2情况下ERRORLEVEL设置不正确! 见在Windows文件重定向和%ERRORLEVEL% 。
该解决方案是相同的,用于检测重定向失败。 使用||
运营商采取行动时失败。
rd testdir || echo The command failed!
离奇的是,当你使用||
操作中,错误级别,然后适当地设置为145,如果该文件夹不为空,或者2如果文件夹不存在。 所以,你甚至不需要做任何事情。 你可以有条件地“执行”了一句话,和错误级别将被设置正确。
rd testdir || rem
echo %errorlevel%
更新2016年1月21日
早在2015年四月,安德烈亚斯Vergison权利的评价是||
没有设置“拒绝访问”,或“......在使用...”错误ERRORLEVEL。 我的Windows 7的时候,我不认为我验证了他的说法,只是认为他是正确的。 但我已经在Windows 10,最近测试||
总是将在错误的ERRORLEVEL为非零。 需要注意的是(call )
是迫使ERRORLEVEL为0,我每次运行命令之前的神秘方式。 另外请注意,我的cmd.exe的会议已经推迟扩张启用。
C:\test>(call ) & rd junk && echo OK || echo ERROR !errorlevel!
Access is denied.
ERROR 5
C:\test>(call ) & rd test && echo OK || echo ERROR !errorlevel!
The directory is not empty.
ERROR 145
C:\test>(call ) & rd \test && echo OK || echo ERROR !errorlevel!
The process cannot access the file because it is being used by another process.
ERROR 32
C:\test>(call ) & rd notExists && echo OK || echo ERROR !errorlevel!
The system cannot find the file specified.
ERROR 2
rd
不会设置errorlevel
为零-它留下errorlevel
不变:FE如果之前的操作正结束errorlevel
和rd
完成成功离开errorlevel
不变。 例如:错误水平robocopy
低于4是警告,不是错误的,可以忽略所以下面的代码可以与甚至当目录被成功删除错误结束:
robocopy ...
if errorlevel 4 goto :error
rd somedir
if errorlevel 1 goto :error
解决方法:忽略错误并检查目录后仍然存在rd
:
rd somedir
if exist somedir goto :error