2009-10-01 22 views
0

與Windows命令行腳本作戰我只是無法去工作。windows命令行腳本變量出錯了嗎?

基本上我試圖啓動一個名爲vnctv.exe的程序,其參數爲HOST ipaddress PORT 5900 PASSWORD x,但是我只想運行帶有當前在線計算機的IP地址的程序。

我試過幾個不同的東西,但我不能得到任何工作正常。

看來,當我運行命令並單獨鍵入命令,他們都正常工作,但是當我運行它在.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個不同的變量

感謝您的幫助

Adam

試過,但仍然得到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 

回答

1

您的cmd處理器拋出的最初抱怨是,您似乎不會結束tokens=2 delims=(%選項字符串。這是因爲您正在使用您的分界集中的特殊%。嘗試把雙%有:

"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和使用!在循環替換%

+0

Thankyou這樣做可以工作,但它啓動了幾次應用程序,因爲我只需要啓動應用程序一次,並將所有參數包含在該調用中。 – 2009-10-01 13:20:52

+0

亞當,請注意我對您評論的最新變化。 – akf 2009-10-01 13:33:11

+0

AHA輝煌的感謝,這是我一直在哪裏錯了謝謝很多 – 2009-10-01 13:43:50

1

嘗試逸出%:

「令牌= 2個delims =(%%」

編輯:以反映注意 另請注意,內部for循環的變量可能與外部衝突。當設置%G時,可能會覆蓋G(%h &%i)後的其他標記。我建議你將外部循環中的%i更改爲%a。

相關問題