如何在 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 上通过 c 程序执行命令

如何在Windows命令提示符下从十六进制字符串写入二进制文件

如何在 Windows 命令提示符下运行 .sh?

如何在 Windows 命令提示符下使用被动 FTP 模式?

Windows下如何使用curl命令?

如何在 Windows 命令提示符下同时启动 2 个程序