Cmd 如何在Windows命令提示符下拆分命令输出?

Cmd 如何在Windows命令提示符下拆分命令输出?,cmd,Cmd,Windows中是否有用于分割命令输出的split命令?我的命令是: ipconfig | findstr /i "Default gateway" | findstr [0-9] 输出为: Default Gateway...: x.x.x.x 我需要一个命令,输出应该只有x.x.x.x在我的计算机上,返回了两个网关,一个用于IPv4,一个用于IPv6。findstr不区分它们。但是,对我来说,IPv4是在IPv6之前返回的。此批处理文件从findstr输出中提取网关的IP地址: @ech

Windows中是否有用于分割命令输出的
split
命令?我的命令是:

ipconfig | findstr /i "Default gateway" | findstr [0-9]
输出为:

Default Gateway...: x.x.x.x

我需要一个命令,输出应该只有
x.x.x.x

在我的计算机上,返回了两个网关,一个用于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=%\u ip%
是在
local
块外传递
local
变量的方式,但您不必使用该变量…

没有确切的拆分函数,但您可以使用
FOR
来完成您想要的任务:

for /f "tokens=2 delims=:" %%i  in ('ipconfig ^| findstr /i "Default gateway" ^| findstr [0-9]') do echo %%i

我真的想要这样的单行命令。非常感谢。但是,当我在cmd提示符中执行此命令时,它会显示“%%此时我未预料到”我修复了错误。我们需要使用%i而不是%%i。这解决了我的问题。非常感谢。在批处理中使用
%%i
,但在活动间模式中使用
%i
,我在开始时使用它来省略空格。也许有一种更简单的方法:对于/f“tokens=12 delims=:“%i in('ipconfig^ | findst r/i“Default gateway”^ | findstr[0-9]”),echo%iI需要命令(在单行中)而不是脚本。那对我会更有帮助