【发布时间】:2010-12-02 22:41:27
【问题描述】:
与 Windows 命令行脚本作斗争,我无法开始工作。
基本上我正在尝试使用 HOST ipaddress PORT 5900 PASSWORD x 的参数启动一个名为 vnctv.exe 的程序,但是我只想使用当前在线计算机的 IP 地址运行该程序。
我尝试了一些不同的方法,但无法正常工作。
似乎当我运行 cmd 并单独输入命令时,它们都可以正常工作,但是当我在 .bat 文件中运行它时,它会失败。
我已经尝试了 enableelayedexpansion 所以我不需要打电话,但我无法让它工作。
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 (如果 %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 (如果 %B EQU 0 call :exec ) Z:\>(如果 0 EQU 0 调用 :exec ) Z:\>set %_megga=vnctv.exe HOST 91.40.20.%A PORT 5900 PASSWORD x Z:\>转到: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 (如果 %B EQU 0 call :exec ) Z:\>(如果 0 EQU 0 调用 :exec ) Z:\>set %_megga=vnctv.exe HOST 91.40.20.%A PORT 5900 PASSWORD x Z:\>转到: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 (如果 %B EQU 0 call :exec ) Z:\>(如果 100 EQU 0 调用 :exec ) Z:\>设置 %_megga=vnctv.exe 主机 91.40.20.%A 端口 5900 密码 x _megga=vnctv.exe Z:\>set %_megga=vnctv.exe HOST 91.40.20.%A PORT 5900 PASSWORD x Z:\>转到: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
【问题讨论】:
标签: windows command-line scripting variables