回答:
文書化されていないように見えますが、FORコマンド内のコマンドにパイプできます。私は最初にこの例からそれについて学びました:
SC query | FOR /F "tokens=2" %%i IN ('FIND /I "SERVICE_NAME"') DO @ECHO %%i
このコードの変更されたバージョンは機能します。
C:\>ipconfig | for /f "tokens=14" %f in ('findstr "Address"') do @echo %f
192.168.x.x
192.168.y.y
この回答で説明されているように、FORコマンド内で「more」を使用して、任意のコマンドからパイプされた入力を解析することもできます。
C:\>ipconfig | findstr "Address" | for /f "tokens=14" %f in ('more') do @echo %f
192.168.x.x
192.168.y.y
ドキュメントを見てfor(実行for /?して確認)、for /fパイプから読み取ることはないと思います。有効なソースは、ファイルセット、「文字列」、および「コマンド」のみです。
FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
次のforようにコマンドを入れることができます:
for /f "tokens=15" %f in ('ipconfig ^| findstr "Address"') do @echo %f
192.168.x.x
192.168.y.y
(それ^|だけでなくなければならないことを指摘してくれた神経溶解のおかげで|)
またはipconfig | findstr "Address"、別のバッチスクリプトを入力して、次のコードを呼び出すこともできます。
for /f "tokens=14" %f in ('ipaddresses') do @echo %f
(スクリプトを呼び出したと想定ipaddresses)。
または、次のようforにして作業を行うこともできますfindstr。
for /f "tokens=2,14" %i in ('ipconfig') do @if %i==Address. @echo %j
192.168.x.x
192.168.y.y
IPv6アドレスとは一致しないため、まったく同じではありませんが、これらの行に沿って何かが機能する可能性があります。
また、に変更tokens=15したことにも注意してくださいtokens=14。行の最後のフィールドはトークン14だと思います。とにかくうまくいきます。
for代わりにパイピングですipconfig。ただ、やるfor /f "tokens=15" %f in ('ipconfig ^| findstr "Address"') do @echo %fときには、^エスケープ文字です。