使用Windows命令行脚本进行战斗我无法开始工作。
基本上我正在尝试使用HOST ipaddress PORT 5900 PASSWORD x的参数启动名为vnctv.exe的程序,但是我只想运行当前在线计算机的IP地址的程序。
我尝试了一些不同的东西,但我无法正常工作。
似乎当我运行cmd并单独输入命令时它们都能正常工作但是当我在.bat文件中运行它时它会失败。
我已经尝试过enabledelayedexpansion,所以我不需要打电话但我无法让它工作。
for循环首先循环通过30-255个地址。下一个循环ping IP并找到丢失率。如果它为0,那么我需要将该地址添加到vnctv.exe的运行参数。我已经尝试回复文件然后删除\ n字符,但无法使其工作。所以脚本应该将参数添加到变量中但它失败了。
这里是
set _megga=vnctv.exe
FOR /L %%A IN (253,1,255) DO (
FOR /F "tokens=2 delims=(%%" %%B
IN ('PING -w 500 -n 1 91.40.20.%%A -w 500 -n 1 ^|find "loss"')
DO ( if %%B EQU 0 call :exec ))
)
:exec
set %%_megga=%_megga% HOST 91.40.20.%%A PORT 5900 PASSWORD x
goto :EOF
echo %%_megga > run.bat
run.bat
并且继承了输出
Z:\>set _megga=vnctv.exe Z:\>FOR /L %A IN (253 1 255) DO (FOR /F "tokens=2 delims=(%" %B IN ('PING -w 500 -n 1 91.40.20.%A -w 500 -n 1 |find "loss"') DO (if %B EQU 0 call :exec ) ) Z:\>(FOR /F "tokens=2 delims=(%" %B IN ('PING -w 500 -n 1 91.40.20.253 -w 500 -n 1 |find "loss"') DO (if %B EQU 0 call :exec ) ) Z:\>(if 0 EQU 0 call :exec ) Z:\>set %_megga=vnctv.exe HOST 91.40.20.%A PORT 5900 PASSWORD x Z:\>goto :EOF Z:\>(FOR /F "tokens=2 delims=(%" %B IN ('PING -w 500 -n 1 91.40.20.254 -w 500 -n 1 |find "loss"') DO (if %B EQU 0 call :exec ) ) Z:\>(if 0 EQU 0 call :exec ) Z:\>set %_megga=vnctv.exe HOST 91.40.20.%A PORT 5900 PASSWORD x Z:\>goto :EOF Z:\>(FOR /F "tokens=2 delims=(%" %B IN ('PING -w 500 -n 1 91.40.20.255 -w 500 -n 1 |find "loss"') DO (if %B EQU 0 call :exec ) ) Z:\>(if 100 EQU 0 call :exec ) Z:\>set %_megga=vnctv.exe HOST 91.40.20.%A PORT 5900 PASSWORD x _megga=vnctv.exe Z:\>set %_megga=vnctv.exe HOST 91.40.20.%A PORT 5900 PASSWORD x Z:\>goto :EOF
当我设置它时,例如应该读取91.40.20.254而不是%A,它也会产生2个不同的变量
感谢您的帮助
亚当
试过这个但仍然得到%1或1而不是实际值
set _megga=vnctv.exe
FOR /L %%A IN (253,1,255) DO (
FOR /F "tokens=2 delims=(%%" %%B IN
('PING -w 500 -n 1 91.40.20.%%A -w 500 -n 1 ^|find "loss"')
DO ( if %%B EQU 0 call :exec %%A))
:exec
set %%_megga=%%_megga HOST 91.40.20.%%1 PORT 5900 PASSWORD x
goto :EOF
答案 0 :(得分:1)
尝试转义%:
“tokens = 2 delims =(%%”
编辑:反映评论 另请注意,内部for循环的变量可能与外部冲突。当设置%G时,可以覆盖G(%h&%i)之后的其他标记。我建议你将外循环中的%i更改为%a。
答案 1 :(得分:1)
您的cmd处理器丢弃的最初抱怨是您似乎不会结束tokens=2 delims=(%
选项字符串。这是因为您在delim集中使用了特殊的%
。尝试在那里加一个%
:
"tokens=2 delims=(%%"
以下是解决问题的不同策略:
setlocal enabledelayedexpansion
set _megga=vnctv.exe
echo echo running %_megga% batch > run.bat
FOR /L %%A IN (253,1,255) DO (
FOR /F "tokens=2 delims=(%%" %%B IN ('PING -w 500 -n 1 91.40.20.%%A -w 500 -n 1 ^|find "loss"') DO (
if %%B EQU 0 set _megga=!_megga! HOST 91.40.20.%%A PORT 5900 PASSWORD x ))
)
echo %_megga% >> run.bat
run.bat
我已经采用了循环的要点,但是我没有跳到标签,而是在循环中连接命令,然后将其回显到run.bat
,然后可以在最后运行。您会注意到我使用setlocal enabledelayedexpansion
并使用!
替换循环中的%
。