我如何通过管道传输到“for”命令?

bar*_*lop 11 windows command-line

我如何通过管道连接到 for 命令。所以代替

    C:\asd>ipconfig | findstr "Address" >a

   C:\asd>for /f "tokens=15" %f in (a) do @echo %f
   192.168.1.3
Run Code Online (Sandbox Code Playgroud)

我希望能够在一条线上完成。

C:\asd>ipconfig | findstr "Address" | for /f "tokens=15" %f do @echo %f
do was unexpected at this time.
Run Code Online (Sandbox Code Playgroud)

Ada*_*m C 24

尽管它似乎没有记录,但您可以通过管道传输到 FOR 命令中的命令。我首先从这个例子中了解到它:

SC query | FOR /F "tokens=2" %%i IN ('FIND /I "SERVICE_NAME"') DO @ECHO %%i
Run Code Online (Sandbox Code Playgroud)

您的代码的此修改版本有效:

C:\>ipconfig | for /f "tokens=14" %f in ('findstr "Address"') do @echo %f
192.168.x.x
192.168.y.y
Run Code Online (Sandbox Code Playgroud)

您还可以在 FOR 命令中使用“more”,如本答案所述,解析从任意命令通过管道输入的输入:

C:\>ipconfig | findstr "Address" | for /f "tokens=14" %f in ('more') do @echo %f
192.168.x.x
192.168.y.y
Run Code Online (Sandbox Code Playgroud)


Mik*_*kel 10

查看for(run for /?to see it)的文档,我认为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]
Run Code Online (Sandbox Code Playgroud)

你可以for像这样把命令放在里面:

for /f "tokens=15" %f in ('ipconfig ^| findstr "Address"') do @echo %f

192.168.x.x
192.168.y.y
Run Code Online (Sandbox Code Playgroud)

(感谢神经溶解指出它必须是^|,而不仅仅是|

或者您可以尝试放入ipconfig | findstr "Address"一个单独的批处理脚本并调用:

for /f "tokens=14" %f in ('ipaddresses') do @echo %f
Run Code Online (Sandbox Code Playgroud)

(假设您调用了脚本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
Run Code Online (Sandbox Code Playgroud)

它不完全相同,因为它不会匹配 IPv6 地址,但是沿着这些路线的东西可以工作。

另请注意,我更改tokens=15tokens=14. 我认为该行的最后一个字段是令牌 14。无论如何对我有用。

  • 根据记录,它“似乎不支持管道”的原因仅仅是因为您没有对其进行转义,它正在使用“for”而不是“ipconfig”。只需在 ('ipconfig ^| findstr "Address"') 中执行 `for /f "tokens=15" %f 执行 @echo %f`,当 `^` 是转义字符时。 (4认同)