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=15为tokens=14. 我认为该行的最后一个字段是令牌 14。无论如何对我有用。
| 归档时间: |
|
| 查看次数: |
29998 次 |
| 最近记录: |