批处理脚本以退出进程并出错

时间:2016-09-06 23:09:06

标签: batch-file profile

我在学区工作,我们需要远程删除个人资料。我们正在使用RemProf。如果遇到两个特定域或名称中具有特定标识符的设备,我需要脚本失败。我希望它以错误代码退出。这将让我们的现场工作人员知道他们已经尝试对由于域或名称限制的设备运行RemProf。这就是我所拥有的。带有-SAD-的行标识设备名称的一部分。如果遇到错误级别1,则此脚本不会退出。它继续使用RemProf并删除配置文件。我很感激任何指导。

Reg Query HKLM\System\CurrentControlSet\services\Tcpip\Parameters /v Hostname /f -SAD-
if %ERRORLEVEL%==1 exit /b 9

Reg Query HKLM\System\CurrentControlSet\services\Tcpip\Parameters /v Domain /f teach.inst.schools
if %ERRORLEVEL%==1 exit /b 0

Reg Query HKLM\System\CurrentControlSet\services\Tcpip\Parameters /v Domain /f admin.schools
if %ERRORLEVEL%==1 exit /b 9


Reg Query HKLM\System\CurrentControlSet\services\Tcpip\Parameters /v Domain /f elem.inst.schools
if %ERRORLEVEL%==0 goto Run_RemProf

Reg Query HKLM\System\CurrentControlSet\services\Tcpip\Parameters /v Domain /f sec.inst.schools
if %ERRORLEVEL%==0 goto Run_RemProf


:Run_RemProf

Rem Deleteing profiles and abandoned files

RemProf.exe /D: /EXCLUDE:Public,Default,Administrator,SOL
RemProf.exe /AD: /EXCLUDE:Public,Default,Administrator,SOL

1 个答案:

答案 0 :(得分:0)

您的Reg Query HKLM\System\CurrentControlSet\services\Tcpip\Parameters /v Hostname /f -SAD- 始终会返回Hostname值以及相应的errorlevel返回值0 - 成功(或1 - 失败),无论<{1}}开关中提供的数据或模式。

/f对于将reg query /?/V个切换放在一起有点简短:

/F

Another official source /v Queries for a specific registry key values. If omitted, all values for the key are queried. Argument to this switch can be optional only when specified along with /f switch. This specifies to search in valuenames only. /f Specifies the data or pattern to search for. Use double quotes if a string contains spaces. Default is "*". 切换:

  

/V指定要使用的注册表值名称   查询。如果省略,则返回KeyName的所有值名称。   如果/v <ValueName>选项为ValueName,则此参数的/f可选   也用过。

可选? Read dictionary.com definitions for adjective optional

  • 常见:留给一个人的选择;不要求或强制要求;
  • 英国人:可能但不是强制性的;留给个人选择。

事实上,ValueName for /V parameter should be omitted if the /f option is also used(非官方):

  

要搜索部分注册表,请使用以下语法:

REG Query HKxx\subkey [/D|/K|/V] /F "search_pattern" [/S] [/E] [/C]
     

使用/D搜索数据(即注册表值的值),/K   搜索匹配的键名/V以搜索匹配值   这些开关的名称,或者没有一个用于搜索键,值和数据。

你可以:

示例脚本(部分注释):

@ECHO OFF
SETLOCAL EnableExtensions DisableDelayedExpansion

set "_pattern=%~1"        for demonstration purposes: first line parameter
if not defined _pattern set "_pattern=-SAD-"

    rem next `_KeyName` variable keeps `reg query` line length <80 chars
set "_KeyName=HKLM\System\CurrentControlSet\services\Tcpip\Parameters"

echo(
echo `findstr` approach:
Reg Query "%_KeyName%" /v Hostname | findstr /I /C:"%_pattern%" >NUL
if errorlevel 1 (
  echo `Hostname` data DOES NOT CONTAIN specified string "%_pattern%"
) else (
  echo `Hostname` data CONTAINS specified string "%_pattern%"
)

echo(
echo `substring` approach:
    rem set `_Hostname` and `_Domain`  
for /F "tokens=1,2,*" %%G in ('
    Reg Query "%_KeyName%" ^| findstr /I /R "\<Domain\> \<Hostname\>"
                            ') do set "_%%G=%%I"
call set "_auxiliary=%%_Hostname:%_pattern%=%%"
if "%_auxiliary%"=="%_Hostname%" (
  echo `Hostname` data DOES NOT CONTAIN specified string "%_pattern%"
) else (
  echo `Hostname` data CONTAINS specified string "%_pattern%"
)

<强>输出

==> D:\bat\SO\39359057.bat -SAD-

`findstr` approach:
`Hostname` data DOES NOT CONTAIN specified string "-SAD-"

`substring` approach:
`Hostname` data DOES NOT CONTAIN specified string "-SAD-"

==> D:\bat\SO\39359057.bat %computername%

`findstr` approach:
`Hostname` data CONTAINS specified string "myNewPC"

`substring` approach:
`Hostname` data CONTAINS specified string "myNewPC"

==>