在 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”和另一个命令来剪切一行的相关部分。
在 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”和另一个命令来剪切一行的相关部分。
您应该能够将命令的结果通过管道传输到 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 变量时输出包含并启用延迟扩展,则结果将被破坏。