消除冗余批处理脚本

时间:2013-10-15 05:07:01

标签: batch-file

我是批处理的新手,需要一些关于如何缩短脚本的指导...... 它工作正常,但有很多重复的线条。

脚本将'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 个答案:

答案 0 :(得分: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设置为" Site Cn FAIL"对于n = 1到6。 下一个FOR解释ARP的输出,过滤为"static"插入符号(^),然后管道告诉批处理管道是命令的一部分,而不是FOR 。 neste FOR遍历字符串192.168.0.1`` to 192.168.0.16 and if that matches the first token from the ARP output (in %% A ) then the appropriate variable is set to ...匹配`

最后,var1 .. var6的内容得到了回应。

似乎没有令牌3的理由,因为%% B只会是#34;静态",给定您的过滤器。同样,space是一个defult分隔符,其他默认值都不会出现在ARP输出行中,而不是fitered。