2013-05-31 47 views
1

我想要做的是通過cmd配置一些vlan範圍。到目前爲止,我所完成的工作是檢索域控制器的IP地址並刪除值前面的空格。我使用以下命令完成了此操作:如何將一個IP地址拆分成單獨的八位字節並在cmd中執行算術

rem通過本地cmd提取ip地址 for/f「tokens = 2 delims =:」%i in('ipconfig^| find/i「IPv4 Address」')設置IP_ADDRESS =%I

示例的結果:設置IP_ADDRESS = 10.0.0.25

REM從IP地址變種移除空的空間 組IP_ADDRESS =%IP_ADDRESS:=%

回波%IP_ADDRESS%立即導致10.0.0.25沒有前面的空間。

接下來我想做的是將ip_address變量分割成單獨的八位字節變量,以便可以對選定的八位字節執行算術運算。

例如:10.0.0.25可隨後被操縱,以反映10 [+ 100] 0.0 [ - 24]

期望的結果將被10.100.0.1

我寧願。嚴格使用Windows命令行完成此操作,但如果更好的方法退出,我願意接受建議。

在此先感謝 喬爾

回答

3

試試這個將八位組分割成變量。

@echo off 
set "ip=10.0.0.25" 
SET "offsets=0.100.0.-24" 

@echo off 
for /f "tokens=1-4 delims=. " %%a in ("%ip%") do (
set octetA=%%a 
set octetB=%%b 
set octetC=%%c 
set octetD=%%d 
) 
FOR /f "tokens=1-4 delims=." %%a in ("%offsets%") do (
SET /a octetA+=%%a 
SET /a octetB+=%%b 
SET /a octetC+=%%c 
SET /a octetD+=%%d 
) 
echo "%octetA%","%octetB%","%octetC%","%octetD%" 
pause 
+1

如果我可以 - 稍加改進,以添加一些功能。如果'delims'被更改爲'delims =。 '(在結束報價前有額外的空間),那麼不需要刪除前導空間...... – Magoo

+0

是的。好的建議和補充。 – foxidrive

+0

+1我喜歡它! :) – Aacini

1

這是foxidrive的同一個解決方案,但壓扁有點... :)

@echo off 
set "ip= 10.0.0.25" 
SET "offsets=0.100.0.-24" 

for /F "tokens=1-4 delims=. " %%a in ("%ip%") do (
    for /F "tokens=1-4 delims=." %%i in ("%offsets%") do (
     set /A octetA=%%a+%%i, octetB=%%b+%%j, octetC=%%c+%%k, octetD=%%d+%%l 
    ) 
) 
echo "%octetA%","%octetB%","%octetC%","%octetD%" 
pause 
相關問題