0

在 cmd.exe 中,某个命令会产生以下形式的输出:

Asd foo content 1
Qwe bar content 1
Asd foo content 2
Qwe bar content 2
...

我想将其格式化为生成:

foo content 1, bar content 1
foo content 2, bar content 2

我怎么做?

我的猜测是“&”(并行命令)、“|”的组合 可以使用(管道)、“findstr”和另一个命令来剪切一行的相关部分。

4

1 回答 1

2

您应该能够将命令的结果通过管道传输到 Windows 的 sed 中,但这需要下载非本机实用程序。GnuWin项目有一个免费版本的 sed。

这是一个不需要任何下载的本机批处理解决方案。

@echo off
setlocal disableDelayedExpansion
for /f "delims=" %%A in ('yourCommand') do (
  set "ln=%%A"
  setlocal enableDelayedExpansion
  set "ln2=!ln:*foo =foo !"
  if "!ln2!" neq "!ln!" (
    <nul set /p "=!ln2!"
  ) else (
    echo , !ln:*bar =bar !
  )
  endlocal
)

以上将丢弃以 a 开头的行;,并且还将丢弃空行。如果需要,这两个限制都可以通过额外的代码来解决。

循环内延迟扩展的切换是为了保留!可能出现在输出中的任何字符。!如果扩展 FOR 变量时输出包含并启用延迟扩展,则结果将被破坏。

于 2012-09-20T16:47:38.233 回答