Batch file ';重命名';命令将ERRORLEVEL设置为0,即使失败也是如此
在我的批处理文件中,我想知道如果Batch file ';重命名';命令将ERRORLEVEL设置为0,即使失败也是如此,batch-file,cmd,Batch File,Cmd,在我的批处理文件中,我想知道如果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
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
嗯<代码>重命名失败,但
%ERRORLEVEL%
为零?这应该是不可能的,否?要获取在(代码块)
内更改的新值,您需要使用以下表单:!错误等级
并在开始时包含setlocalenabledelayedexpansion
命令;在此论坛中搜索“延迟扩展” 在命令提示符窗口中运行的帮助输出if/?
和旧的Microsoft支持文章解释了如何在命令块外部以及从MS-DOS到当前最新的Windows 10 Fall Creators更新的命令块内部测试上一个命令/脚本/应用程序的退出代码
解决方法就是简单地使用
if errorlevel 1 echo We got a problem.
而不是台词
echo %ERRORLEVEL%
IF NOT %ERRORLEVEL% EQU 0 (echo We got a problem.)
如果以前执行的命令退出时的值大于或等于1表示执行错误,而不是0表示执行成功,那么测试就非常容易了
我建议还可以查看堆栈溢出页面:
(代码块)
内更改的新值,您需要使用以下表单:!错误等级
并在开始时包含setlocalenabledelayedexpansion
命令;在此论坛中搜索“延迟扩展”。。。我还建议你复习一下@Aacini:太好了,就这样。如果你能给我一个答案,我可以接受!如果打开cmd提示符并阅读If
命令的帮助,也可以使用这种类型的错误检查<代码>如果ERRORLEVEL 1 ECHO出现问题。