コマンドを使用して、書き込まれたばかりのファイルの最初の行を変数に読み取り、次を使用SET /P
してその行でファイルを上書きしますECHO
。
ipconfig | find "IP Address" > \File.txt
< \File.txt SET /P first_ip=
ECHO %first_ip%> \File.txt
更新(コメントへの回答):
FOR /F
IP アドレスだけを抽出するには、次のようなループを使用できます。
ipconfig | find "IP Address" > \File.txt
< \File.txt SET /P first_ip=
FOR /F "delims=: tokens=2" %%I IN ("%first_ip%") DO (
ECHO %%I> \File.txt
)
ループを使用するFOR /F
と、テキスト (ファイルまたは文字列リテラル) を 1 行ずつ処理し、指定された区切り文字に基づいて各行をフィールド (またはtokens ) に分割できます。このコマンドの詳細については、組み込みのヘルプ ( FOR /?
) を参照してください。first_ip
この場合、処理される部分は文字列リテラル ( の値) であり、区切り文字は に設定され:
、ループ変数 ( %%I
) は IP アドレスである 2番目のトークンを受け取ることだけを追加します。
と IPの間のスペース:
は保持されることに注意してください。つまり、トークン ( 100.100.100.223
) の一部になるため、ファイルにも書き込まれます。あまり満足できない場合は、次のようにサブルーチンを使用してスペースを取り除くことができます。
ipconfig | find "IP Address" > \File.txt
< \File.txt SET /P first_ip=
FOR /F "delims=: tokens=2" %%I IN ("%first_ip%") DO (
CALL :MyEcho %%I
)
:: the following command is there merely to
:: avoid running (into) the subroutine again
GOTO :EOF
:MyEcho
ECHO %1> \File.txt
サブルーチンが呼び出されると ( CALL :MyEcho %%I
)、引数が先頭のスペースと共に渡されます。しかし、サブルーチンのコマンド ラインを処理するとき、そのスペースは値の一部として認識されなくなります。これは、引数が引用符で囲まれていないため、パーサーは名前から 2 つのスペースで区切られた引数のみを認識するためです。したがって、%1
サブルーチン内の は、先行スペースのないアドレスに評価されます。