如何在 Windows 命令提示符下拆分命令输出?
Posted
技术标签:
【中文标题】如何在 Windows 命令提示符下拆分命令输出?【英文标题】:How to split command output in Windows command prompt? 【发布时间】:2013-06-21 19:34:10 【问题描述】:Windows 中是否有 split
命令来拆分命令输出?我的命令是:
ipconfig | findstr /i "Default gateway" | findstr [0-9]
输出是:
Default Gateway...: x.x.x.x
我需要一个命令,输出应该只有x.x.x.x
。
【问题讨论】:
【参考方案1】:在我的计算机上,返回了两个网关,一个用于 IPv4,一个用于 IPv6。 findstr
不区分它们。但是,对我来说,IPv4 在 IPv6 之前返回。此批处理文件从findstr
输出中提取网关的 IP 地址:
@echo off
setlocal ENABLEDELAYEDEXPANSION
for /f "tokens=2 delims=:" %%i in ('ipconfig ^| findstr "Default gateway"') do (
if not defined _ip set _ip=%%i
)
for /f "tokens=1 delims= " %%i in ("!_ip!") do (
set _ip=%%i
)
echo !_ip!
endlocal & set yourvar=%_ip%
我将它分成两个单独的for
命令(而不是嵌套for
命令),这样我就可以抓住从findstr
返回的第一个“网关”。结果有一个前导空格,因此第二个for
命令删除了前导空格。最后的& set yourvar=%_ip%
是您在local
块之外传递local
变量的方式,但您不必使用它...
【讨论】:
我需要一个命令(在一行中)而不是脚本。这对我会更有帮助【参考方案2】:不完全是拆分功能,但你可以使用FOR
来完成你想要的:
for /f "tokens=2 delims=:" %%i in ('ipconfig ^| findstr /i "Default gateway" ^| findstr [0-9]') do echo %%i
【讨论】:
真的我想要这样的单行命令。谢谢你。但是,当我在 cmd 提示符下执行此操作时,它会说“ %%i 在这个时候是意外的” 我修复了错误。我们需要使用 %i 而不是 %%i。这解决了我的问题。非常感谢。 批量使用%%i
,但在交互模式下使用%i
我用它来省略开头的空格。也许有更简单的方法: for /f "tokens=12 delims=: " %i in ('ipconfig ^| findst r /i "Default gateway" ^| findstr [0-9]') do echo %i跨度>
以上是关于如何在 Windows 命令提示符下拆分命令输出?的主要内容,如果未能解决你的问题,请参考以下文章
如何在Windows命令提示符下从十六进制字符串写入二进制文件