【问题标题】:How to split command output in Windows command prompt?如何在 Windows 命令提示符下拆分命令输出?
【发布时间】:2024-01-17 18:17:01
【问题描述】:

Windows 中是否有 split 命令来拆分命令输出?我的命令是:

ipconfig | findstr /i "Default gateway" | findstr [0-9]

输出是:

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

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

【问题讨论】:

    标签: cmd


    【解决方案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跨度>
    最近更新 更多