我正在创建一个小批量文件,以自动化我们每天使用的一些网络故障排除命令。
我创建了一个简单的菜单,但当我尝试运行循环命令时,它会出错,无法完成循环。选项1(SURVEY(运行良好,但PINGER部分只是在不执行任何操作的情况下终止命令提示符。
SET /P M=Type 1, 2, 3, or 4 then press ENTER:
IF %M%==1 GOTO SURVEY
IF %M%==2 GOTO PINGER
IF %M%==3 GOTO MAP
IF %M%==4 GOTO EOF
:SURVEY
echo 3 Point WiFi Survey... Please Wait...
echo ===================================================================================================== >> surveyresults.txt
echo 3 Point WiFi Survey Results >> surveyresults.txt
netsh wlan show networks bssid >> surveyresults.txt
echo 3 Point WiFi Survey Complete
echo ===================================================================================================== >> surveyresults.txt
GOTO MENU
:PINGER
echo Pinging Devices on Subnet... Please Wait...
echo ===================================================================================================== >> surveyresults.txt
echo Device Pings >> surveyresults.txt
FOR /L %i IN (1,1,254) DO ping -a -n 1 192.168.1.%i | FIND /i "Reply" >> surveyresults.txt
echo Pinging Complete
echo ===================================================================================================== >> surveyresults.txt
GOTO MENU
:EOF
脚本有两个主要问题。
-
您使用错误的命令
SET /P
进行已知菜单项列表的用户输入。您应该使用CHOICE
实用程序打开命令提示符窗口,键入choice /?
,然后按ENTER键查看其用法信息 -
您尚未阅读
FOR
命令for /?
的帮助信息,该命令专门说明To use the FOR command in a batch program, specify %%variable instead of %variable
。
因此,这里对提交的批处理文件中包含的所有内容进行了改进的重写:
%SystemRoot%System32choice.exe /C 1234
If ErrorLevel 4 GoTo :EOF
If ErrorLevel 3 GoTo MAP
If ErrorLevel 2 GoTo PINGER
:SURVEY
( Echo 3 Point WiFi Survey... Please Wait... > CON
Echo =====================================================================================================
Echo 3 Point WiFi Survey Results
%SystemRoot%System32netsh.exe WLAN Show Networks BSSID
Echo 3 Point WiFi Survey Complete > CON
Echo =====================================================================================================
) >> "surveyresults.txt"
GoTo MENU
:PINGER
( Echo Pinging Devices on Subnet... Please Wait... > CON
Echo =====================================================================================================
Echo Device Pings
For /L %%G In (1,1,254) Do %SystemRoot%System32PING.EXE -a -n 1 192.168.1.%%G | %SystemRoot%System32find.exe /i "Reply"
Echo Pinging Complete > CON
Echo =====================================================================================================
) >> "surveyresults.txt"
GoTo MENU