1

这是整个问题。我正在尝试读取计算机上给定适配器的 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 地址而无需我正在使用的所有步骤.. 那将作为好吧..我也不太熟悉上面列出的任何代码,只是简单地从那里的其他答案中抄袭了它..所以也许我只是错过了一些简单的东西,因为它对我来说没有那么大的意义。

4

3 回答 3

3

FOR /F 可以直接处理命令的输出。您可以将分隔符设置为一个点和一个空格,这样您就可以一步解析出正确的标记。

请注意,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%
于 2013-10-31T01:05:57.843 回答
0

尝试首先删除集合中计数周围的 %,如果这不起作用,请发表评论,我将编辑我的答案

于 2013-10-30T23:58:30.193 回答
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.
    )
)
于 2013-10-31T04:36:22.730 回答