2016-09-06 64 views
2

我在學區工作,我們需要遠程刪除配置文件。我們正在使用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 

回答

0

Reg Query HKLM\System\CurrentControlSet\services\Tcpip\Parameters /v Hostname /f -SAD-你總是返回Hostname,具有0適當errorlevel返回值沿 - 成功(或1 - 失敗)無論數據或圖案的在/f開關提供。

reg query /?是有點短有關使用/V/F交換機連接在一起:

/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 "*". 

Another official source說,大約/V開關:

/v <ValueName>指定註冊表值名稱是爲 查詢。如果省略,則返回KeyName的所有值名稱。 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" 

==> 
+0

謝謝你的信息。它解釋了爲什麼我總是獲得相同的回報價值。我假設我可以調整行來搜索域。如果發現該字符串,或者繼續刪除配置文件(如果沒有),我將如何繼續使腳本失敗並返回代碼。我主要關心的是腳本如果找到名稱和/或域名,則退出/取消/停止。我想要盒子關閉。感謝您的幫助。 – emi