我是批处理的新手,需要一些关于如何缩短脚本的指导...... 它工作正常,但有很多重复的线条。
脚本将'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
答案 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。