Answers:
尽管它似乎没有记录在案,但您可以通过管道将其传递到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命令中使用“更多”,如此答案中所述,以解析从任意命令管道输入的输入:
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
,什么时候^
是转义字符。