在我的批处理文件中,我想知道如果rename
失败,为什么我不能为错误处理创建一个钩子。我创建了一个文件夹foo
并且有一个shell将其cwd更改为foo,以便该文件夹不应该被重新命名。然后我开始我的脚本:
for %%x in (%PROGRAMFILES(X86)%") do (
for %%y in (foo) do (
if exist "%%~x\%%~y" (
rename "%%~x\%%~y" _to_be_removed
echo %ERRORLEVEL%
IF NOT %ERRORLEVEL% EQU 0 (echo We got a problem.)
)
)
)
不幸的是,我收到通知说该文件夹无法删除,因为它正在使用中:
Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird.
0
咦? rename
失败,但%ERRORLEVEL%
为零?这不可能,不是吗?
答案 0 :(得分:1)
要获得在(code block)
内更改的新值,您需要使用此表单:!errorlevel!
并在开头包含setlocal EnableDelayedExpansion
命令;搜索"延迟扩展"在这个论坛......
答案 1 :(得分:0)
在命令提示符窗口if /?
和旧的Microsoft支持文章Testing for a Specific Error Level in Batch Files中运行的帮助输出解释了如何在命令块外部测试先前命令/脚本/应用程序的退出代码以及在从MS-DOS到当前最新的Windows 10 Fall Creators Update的命令块中。
解决方案只是使用
if errorlevel 1 echo We got a problem.
代替行
echo %ERRORLEVEL%
IF NOT %ERRORLEVEL% EQU 0 (echo We got a problem.)
如果先前执行的命令以大于或等于1的值退出,表示执行时出错而不是0表示执行成功,那么测试真的很容易。
我建议您另见Stack Overflow页面: