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や空白文字などをロードしているため、失敗します。その時点で、数値だけではないため、「カウント」変数を減らすことができません..最初に読み込まれた数字だけを返します..または、試したことに応じて、「エコーオフ」またはその他のさまざまなものが返されます..

私が探しているのは、数値をロードしてデクリメントするのに十分なコードか、または私が使用しているすべての手順を実行せずに IP アドレスを抽出して変更するより良い方法を考えることができるかのいずれかです..それは次のように機能しますまあ..私は上記のコードのどれにもあまり精通していないので、そこにある他の回答から単にそれを盗んだだけです..だから、単純なものが欠けているだけかもしれません。

4

3 に答える 3

3

FOR /F は、コマンドの出力を直接処理できます。delims をドットとスペースに設定できるため、1 つのステップで正しいトークンを解析できます。

FINDSTR "IP Address" は、"IP" または "Address" を含む行と一致することに注意してください。/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 に答える