如何知道批量编程中命令执行的结束状态

时间:2014-09-12 06:19:24

标签: batch-file cmd

我试图通过以下命令

在Mozilla浏览器中缓存清除
@echo off
set DataDir=C:\Users\%USERNAME%\AppData\Local\Mozilla\Firefox\Profiles
del /q /s /f "%DataDir%"
rd /s /q "%DataDir%"
for /d %%x in (C:\Users\%USERNAME%\AppData\Roaming\Mozilla\Firefox\Profiles\*) do del /q /s /f %%x\*sqlite

它工作正常,但我怎样才能确保完成命令的执行,即清除mozilla浏览器中的缓存。

2 个答案:

答案 0 :(得分:0)

好的,正如Christian.K所说,您可以使用%ERRORLEVEL%来确定每个执行命令的成功或失败。 Lasse V. Karlsen表示,你可以在%ERRORLEVEL%的值上失败。使用以下代码的示例:

@echo off
set DataDir=C:\Users\%USERNAME%\AppData\Local\Mozilla\Firefox\Profiles
del /q /s /f "%DataDir%"
if %ERRORLEVEL% NEQ 0 goto :failure

rd /s /q "%DataDir%"
if %ERRORLEVEL% NEQ 0 goto :failure

setlocal enabledelayedexpansion
for /d %%x in (C:\Users\%USERNAME%\AppData\Roaming\Mozilla\Firefox\Profiles\*) do (
    del /q /s /f %%x\*sqlite
    if !ERRORLEVEL! NEQ 0 goto :failure
)
endlocal
goto :EOF

:failure
echo do something here
exit
goto :EOF
  1. 使用NEQ 0测试%ERRORLEVEL%。当命令失败时,我已经看到这个值不是1。
  2. setlocal enabledelayedexpansion在每次执行for循环后处理%ERRORLEVEL%变量。如果没有这个,它只会在输入for循环时评估%ERRORLEVEL%变量中包含的内容。
  3. goto:主脚本末尾的EOF,因此在脚本完成后不会执行标签。另外在标签的末尾添加这个以防止相同(我在我的出口也会阻止它,但你可能不想在失败时退出脚本)。

答案 1 :(得分:0)

要在用户名中处理spaces等,您可以将其用作上一个命令:

for /d %%x in ("C:\Users\%USERNAME%\AppData\Roaming\Mozilla\Firefox\Profiles\*") do del /q /s /f "%%x\*.sqlite"

这也假设您要删除的文件的扩展名为.sqlite

如果浏览器尚未关闭,文件可能会被锁定。