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

コマンドの結果を sed for Windows にパイプできるはずですが、それには非ネイティブ ユーティリティをダウンロードする必要があります。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
)

上記は、で始まる行を破棄し、;空の行も破棄します。両方の制限は、必要に応じて追加のコードで解決できます。

ループ内の遅延展開の切り替えは!、出力に現れる可能性のある文字を保持するために行われます。!FOR 変数が展開されるときに、出力に遅延展開が有効になっていると、結果が破損します。

于 2012-09-20T16:47:38.233 に答える