这是整个问题。我正在尝试读取计算机上给定适配器的IP地址,将最后一位数减1,然后将新IP地址添加为路由。到目前为止,我已设法以下列方式提取IP地址:
netsh interface ip show config name=15| findstr "IP Adress" > C:\ip.txt
for /f "tokens=2 delims=:" %%F in (c:\ip.txt) do echo %%F > c:\ipstripped.txt
for /f "tokens=2 delims=1" %%F in (C:\ipstripped.txt) do echo 1%%F >c:\ipdigits.txt
这会给我一个文件,其中包含IP地址,但也有空格,可能还有一行回车符。然后我跑:
for /f "tokens=4 delims=." %%F in (C:\ipdigits.txt) do echo %%F >c:\lastdig.txt
这会给我一个文件,里面只有最后一个数字,但似乎还有额外的字符..那时,当我尝试运行时:
for /f "delims=" %%f in (c:\lastdig.txt) DO Set count=%%f
echo %count%
(
set /a %count%-=1
echo %count%
)
echo %count%> C:\decdigit.txt
它失败了,因为我猜,它正在从文件加载6和空白字符等,此时它不能减少“count”变量,因为它不仅仅是一个数值..我已经得到它只返回最初读入的数字..或它将返回“回声关闭”或其他各种事情取决于我尝试..
我正在寻找的只是足够的代码来获取加载和减少的数量,或者如果你能想出更好的方法来提取和更改IP地址而没有我正在使用的所有步骤..那也可以工作..我也不太熟悉上面列出的任何代码,只是简单地将其从那里的其他答案中删除了......所以也许我只是错过了一些简单的东西,因为它没有任何意义对我来说。
答案 0 :(得分:3)
FOR / F可以直接处理命令的输出。您可以将delims设置为点和空格,以便您可以一步解析出正确的标记。
请注意,FINDSTR“IP地址”将匹配包含“IP”或“地址”的行。如果要查找包含空格的字符串文字,则需要/C:string
选项。 (在这种情况下可能无关紧要,但最好注意)
@echo off
setlocal
for /f "tokens=3-6 delims=. " %%A in (
'"netsh interface ip show config name=15|findstr /c:"IP Address""'
) do (
set "beg=%%A.%%B.%%C."
set /a "end=%%D-1"
)
set "new=%beg%%end%"
echo new=%new%
答案 1 :(得分:0)
首先尝试删除集合中的计数%,如果这不起作用,请评论,我将编辑我的答案
答案 2 :(得分:0)
@echo off
setlocal enabledelayedexpansion
for /f "tokens=2 delims=:" %%a in ( '"netsh interface ip show config | findstr "IP Adress""' ) do (
SET IP_DIGITS=%%a
SET IP_DIGITS=!IP_DIGITS: =!
echo Old IP Address: !IP_DIGITS!
for /f "tokens=1,2,3,4 delims=." %%b in ( "!IP_DIGITS!" ) DO (
set /a NEW_DIGIT=%%e-1
ECHO New IP Address %%b.%%c.%%d.!NEW_DIGIT!
ECHO.
)
)