2013-10-15 92 views
1

我是批處理新手,需要一些關於如何使腳本更短的指導... 它工作正常,但很多重複的行。消除冗餘批處理腳本

腳本發送'arp -a'到臨時文件進行解析,然後通過6個IP地址檢查它們是否是靜態的。

任何建議創建更短的更好的方法將不勝感激。謝謝 !


@ECHO OFF 

cls 

ECHO ---------------Check SiteC IP = Static ----------------- 

ARP -a > O:\temp_log.txt 

SET /A var1 = 0 
SET /A var2 = 0 
SET /A var3 = 0 
SET /A var4 = 0 
SET /A var5 = 0 
SET /A var6 = 0 


FOR /F "tokens=1,3 delims= " %%A IN ('findstr "static" "O:\temp_log.txt"') DO IF "%% A"=="192.168.0.11" ECHO %%A = %%B && SET /A var1 = 1 
IF %var1% == 1 (ECHO Match) ELSE (ECHO SiteC1 FAIL) 

ECHO -- 

FOR /F "tokens=1,3 delims= " %%A IN ('findstr "static" "O:\temp_log.txt"') DO IF "%%A"=="192.168.0.12" ECHO %%A = %%B && SET /A var2 = 1 
IF %var2% == 1 (ECHO Match) ELSE (ECHO SiteC2 FAIL) 

ECHO -- 

FOR /F "tokens=1,3 delims= " %%A IN ('findstr "static" "O:\temp_log.txt"') DO IF "%%A"=="192.168.0.13" ECHO %%A = %%B && SET /A var3 = 1 
IF %var3% == 1 (ECHO Match) ELSE (ECHO SiteC2 FAIL) 

ECHO -- 


FOR /F "tokens=1,3 delims= " %%A IN ('findstr "static" "O:\temp_log.txt"') DO IF "%%A"=="192.168.0.14" ECHO %%A = %%B && SET /A var4 = 1 
IF %var4% == 1 (ECHO Match) ELSE (ECHO SiteC2 FAIL) 

ECHO -- 

FOR /F "tokens=1,3 delims= " %%A IN ('findstr "static" "O:\temp_log.txt"') DO IF "%%A"=="192.168.0.15" ECHO %%A = %%B && SET /A var5 = 1 
IF %var5% == 1 (ECHO Match) ELSE (ECHO SiteC5 FAIL) 

ECHO -- 


FOR /F "tokens=1,3 delims= " %%A IN ('findstr "static" "O:\temp_log.txt"') DO IF "%%A"=="192.168.0.16" ECHO %%A = %%B && SET /A var6 = 1 
IF %var6% == 1 (ECHO Match) ELSE (ECHO SiteC6 FAIL) 


ECHO. 
ECHO. 

pause 

回答

1
@ECHO OFF 
SETLOCAL 
FOR /l %%s IN (1,1,6) DO SET "var%%s=Site C%%s FAIL" 
FOR /f %%A IN ('arp -a ^|findstr "static"') DO (
FOR /l %%s IN (1,1,6) DO (ECHO %%A 
    IF %%A==192.168.0.1%%s SET var%%s=Site C%%s Match 
) 
) 
FOR /l %%s IN (1,1,6) DO CALL ECHO %%var%%s%% 
GOTO :EOF 

這應該替換。

第一FOR套VARn「網站的C n FAIL」對於n = 1至6 下一個for解釋的ARP輸出,過濾爲"static"尖號(^)管告訴批次,所述管是部分前的命令,而不是FOR。 通過串192.168.0.1`` to 192.168.0.16 and if that matches the first token from the ARP output (in %%一個) then the appropriate variable is set to for循環索泰... Match`

最後,var1內容.. var6的呼應。

標記3看起來沒有理由,因爲%% B只會是「靜態」的,因爲您的過濾器。同樣地,空格是一個瑕疵分隔符,並且在ARP輸出行中沒有任何其他默認值會發生。

+0

謝謝你的幫助。這開啓了一種全新的觀察腳本的方式。 – user2881189