【发布时间】:2019-01-10 17:26:28
【问题描述】:
我的批处理文件运行几个注册表编辑命令,如果所述注册表编辑命令返回错误级别,我想实现一个条件。我的问题是:我应该将这些命令包装在一个函数中,还是在每个注册表命令之后创建有条件的错误级别?我担心将这些命令包装到一个函数中是不是每个命令都会被检查。我想确保每个命令都得到检查,并返回一个错误级别。
用于在函数中包装命令的代码块可能不正确或缺少部分。不确定我是否需要在每个函数结束时包含一个 EXIT?这是一个多步骤批处理脚本的一部分。
TITLE Disable UAC
ECHO STEP 1: Disable User Account Control
reg add HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f
reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f
IF %ERRORLEVEL% NEQ 0 ECHO An error was found w/ error code of: %ERRORLEVEL%
或
:disable_uac
TITLE Disable UAC
ECHO STEP 1: Disable User Account Control
reg add HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f
reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f
call :disable_uac
IF %ERRORLEVEL% NEQ 0 ECHO An error was found w/ error code of: %ERRORLEVEL$
关于第一个代码块,我假设 ERRORLEVEL 条件只会返回 LAST 命令的错误代码而不是两者?
更新代码:
@echo off
goto ErrorCheck
SetLocal EnableDelayedExpansion
ECHO STEP 1: Copy Folder
robocopy "C:\Users\!username!\Documents\WindowsSetup\Training_Videos" "C:\Users\!username!\Desktop\Training_Videos" /e /copyall
CMD /K
:ErrorCheck
title Disable UAC
for /F "useback skip=2 delims= eol=" %%I in ("%~f0") do (
IF "%%~I" == ":ErrorCheck" exit /B
ECHO %%I
%%I >>"C:\errorlog.log"
if errorlevel 1 exit /B & ECHO You have encountered an issue. Look at Error Log for more information
)
【问题讨论】:
-
是的,ERRORLEVEL 仅指最后一个命令,一旦您执行另一个命令,它就会被覆盖。
-
因此,如果我不将这两个命令包装在一个函数中,那么如果我想要检查这两个命令,我需要调用该 ERRORLEVEL if 语句两次?
-
您需要检查错误的频率取决于您在做什么。在这种情况下,第一个 reg 命令的错误并不一定意味着第二个 reg 命令也会失败(因为它们写入不同的注册表位置)。但也许继续执行脚本仍然没有意义,因此您可能仍然想要在每个命令之后检查错误。 (顺便说一句,你为什么用大写字母写“EVERY”?错误处理是必要的——不要认为这是一件麻烦事!)
-
使用
for循环或在每个命令后使用%errorlevel%。 -
通过附加
|| (echo this command failed)在失败时使用条件执行怎么样?
标签: batch-file cmd