2015-09-29 49 views
0

我已經寫一個批處理文件,讓我設置自定義的ping請求輸入的細節,但是當我嘗試運行它,我可以沒有問題輸入IP地址,如果我進入這將退出退出,但是當我輸入一個號碼爲數據包的大小,同時評估if %size% GTR 4096它會拋出一個意外的錯誤。批量奇怪的GTR錯誤

我已經在這裏看到其他職位如this而據我可以告訴我的代碼應該工作。它有什麼問題?

:pinger_presub_error 
color 
echo Invalid input 
set size = 64 
pause > nul 

:pinger 
title Pinger 
color 0B 
cls 
echo Enter exit at any point to quit. 
echo. 
echo Enter IP Adress to ping: 
set /p IPAdress= 
if "%IPAdress%" == "exit" goto end 
echo. 
echo Enter packet size 8-4096, leave empty for default(64): 
set /p /a size= 
if "%size%" == "exit" goto end 
if "%size%" == "" set size = 64 
if %size% GTR 4096 (goto pinger_presub_error) 
if %size% LSS 8 (goto pinger_presub_error) 
echo. 
echo Enter number of echos 1-20, leave empty for default(1): 
set /p /a echos= 
if "%echos%" == "exit" goto end 
if "%echos%" == "" set echo = 1 
if %echos% GTR 20 (goto pinger_presub_error) 
if %echos% LSS 1 (goto pinger_presub_error) 
cls 
echo [Ctrl]+[C] to end 
ping /l %size% /t /n %echos% %IPAdress% 
goto end 

:end 
exit 

回答

2
set /p /a size= 
    ^..^...........one or the other. 

使用/p以提示算術用戶和/a。你的代碼會向用戶和檢索的值存儲在一個名爲/a size

  v .......space included in variable value 
set size = 64 
     ^.........space included in variable name 

更好地利用

set "size=64" 

,當然變量,更改代碼的其餘部分指出的問題。您echos(即還被稱爲echo)變量有同樣的問題。

3
set size = 64 

將名爲size<space>變量的<space>64

的值刪除空格(或添加/a):

set "size=64" 

set /a size = 64 
+0

1,有趣。我知道SET/A會忽略右側的空格,但我不知道它會從左側剝離空格。很高興知道。 – dbenham

+0

@dbenham是 - 令人困惑。我希望,事實並非如此。這使得很難解釋爲什麼'set'(沒有'/ a')不喜歡空格。 – Stephan

+0

同意。但左/右對稱很方便,如下所示:'set/a x * =(y + = 1)'。在優化批量遊戲以獲得速度之前,我已經在一個表達式中使用了雙分配(沒有空格)。 – dbenham