我想在 cmd 文件中运行 SFC 命令。在检查结束时,我想验证 SFC 是否发现错误(可以显示错误消息)。不幸的是,errorlevel 似乎无法与 sfc 配合使用 - 根据我的经验,它总是显示 0,无论它是否发现损坏的文件。
有什么想法可以解决这个问题?
更新:更准确地说,我想要的是这个。cmd 启动一些备份作业等,然后启动 sfc/scannow。如果 sfc 发现损坏的文件并修复了它们,我希望可以触发一些警报并且 cmd 停止,这样第二天早上我就能发现有什么不对劲(我知道 /scannow 应该已经修复了所有问题 - 但我想看看这个)。通常对于这种“错误处理”,我会读出 %errorlevel% 以查明命令是否产生了错误。但这在 sfc 中是不可能的,因为 - 根据我的经验 - 无论如何,它总是显示 0 的错误级别。我现在正在寻找一种解决方法。更新结束。
问候!
答案1
好吧...所以我花了几个小时在互联网上搜索任何我能找到的与 SFC 相关的东西,这是我现在在 2023 年 1 月 3 日可以提出的建议:
首先,当您检查错误级别并回显它以找出原因时,我强烈建议您这样做:
并且在 setlocal delayedexpension 中它不是 %errorlevel% 而是 !errorlevel!
错误级别处理
@REM SFC /scannow command
SFC /scannow & errLevel = %errorlevel%
@REM You can add some code here as well as much as you want
if %errLevel% EQU 1 @echo case of standard error of SFC operation
if %errLevel% EQU -1073741510 @echo SFC was forced to quit by the user with ctrl+d
if %errLevel% EQU 0 @echo case of success operation
这样做的好处是您不必在 sfc 命令之后立即处理错误级别。因此,您可以将 ifs 放在批处理 (.bat) 文件中的任意位置。
希望有人读到这篇文章,并希望这会有所帮助。