2016-09-28 36 views
2

我似乎碰到了一个试图获取批处理文件以从用户输入的变量中减去一组数字的路障。我有一个命令,用户输入IP地址,然后将其分隔为四个独立的八位字节,然后我需要从最后一个八位字节中减去19。无论我如何设置它,它都会返回-19。我读了一组/一个不需要%,但似乎没有任何帮助批处理数学命令不起作用

echo. Enter IP address of the CSR on the site. 
echo. Example: 11.152.34.82 
set /p IP="IP Address: " 
for /F "tokens=1,2,3,4 delims=." %%a in ("%IP%") do echo %%a, %%b, %%c, %%d 
pause 
set /a z=d - 19 
echo. %z% 
pause 

我也曾尝试

set /a z=%%d - 19 
echo. %z% 
pause 

set /a z=%d% - 19 
echo. %z% 
pause 

任何帮助,将不胜感激。

+0

不能使用%% varname,但%varname%in.bat文件 –

+2

您尝试访问循环外部的'%% d',但在那里没有定义 – jeb

+0

您意识到您将不得不做一些数据验证以确保第4个八位字节大于19. – Squashman

回答

4

捕获循环中的最后一个字节,然后对变量进行操作:

for /F "tokens=1,2,3,4 delims=." %%a in ("%IP%") do (
    echo %%a, %%b, %%c, %%d 
    set last=%%d 
) 

set /a z=%last% - 19 
echo z=%z% 
+2

您可以也可以写成'set/az = last - 19' – Squashman

+0

你甚至可以在'for/F'循环中进行计算:'set/az = %% d - 19'(所以不需要临时变量'last ')... – aschipfl

1

使用类似于我在你提供的最后一个问题的最后一个方法:

@Echo Off 
Echo= Enter IP address of the CSR on the site. 
Echo= Example: 11.152.34.82 
Set/P "IPA= " 
Call :Sub %IPA:.= % 

Rem Your commands using new %IPA% here: 
Echo= Your new IP address is %IPA% 

Pause 
Exit/B 

:Sub 
    ClS 
    If %4 Gtr 19 Set/A LO=%4-19 
    Set "IPA=%1.%2.%3.%LO%"