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
4

1 回答 1

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

这应该替代。

对于 n=1 到 6,第一个 FOR 设置VARn为“Site Cn FAIL”。下一个 FOR 解释 的输出,在管道告诉批处理管道是命令的一部分之前ARP过滤"static"插入符号 ( ),而不是. 嵌套 FOR 循环遍历字符串192.168.0.16 ARP %%A ...Match`^FOR192.168.0.1`` toand if that matches the first token from theoutput (in) then the appropriate variable is set to

最后,var1..的内容var6被回显。

令牌 3 似乎没有理由,因为 %%B 只会是“静态的”,给定您的过滤器。同样,空格是默认分隔符,其他默认值都不会出现在ARP输出行中。

于 2013-10-15T05:45:41.963 回答