2013-10-15 54 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