2015-09-29 31 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