1

コマンドの結果をループして、そのループ内の1つの変数()にすべてを追加して!results!います。ループの最後で、結果が空でない場合は、それらを出力します。それぞれの結果を新しい行に表示したいと思います。

setlocal EnableDelayedExpansion
set results=
set lf=^

for /f "delims=" %%a in ('call mvn dependency:analyze ^| findstr "WARNING"')
    do ( set results=!results!!lf!%%a )
    if not [!results!]==[] (
        echo. ------------------------------------
        echo. FOUND MATCHES 
        echo. ------------------------------------
        echo. !results! 
        echo. ------------------------------------
        echo. ------------------------------------
        echo. && echo.
    )

ここで見た新しいラインバッチハックを使用しようとしていますが、このコンテキストでは機能していないようです。

私が得ているもの

------------------------------------
FOUND MATCHES 
------------------------------------
[WARNING] Used undeclared dependencies found: [WARNING]    org.springframework:spring-jms:jar:3.0.5.RELEASE:compile   [WARNING]    org
    .springframework:spring-beans:jar:3.0.5.RELEASE:compile         [WARNING]    xml-apis:xml-apis:jar:1.3.04:compile
------------------------------------
------------------------------------

欲しいもの

------------------------------------
FOUND MATCHES 
------------------------------------
[WARNING] Used undeclared dependencies found:
[WARNING]    org.springframework:spring-jms:jar:3.0.5.RELEASE:compile   
[WARNING]    org.springframework:spring-beans:jar:3.0.5.RELEASE:compile         
[WARNING]    xml-apis:xml-apis:jar:1.3.04:compile
------------------------------------
------------------------------------
4

1 に答える 1

2

それを完全に実行するには、いくつかのsetlocalステートメントを追加し、 と の間に余分な空白行を追加する必要がset lf=^ありましたfor。私がそれをしたら、実際にはあなたとは異なる出力が表示されます:

 !results!!lf!%a
[WARNING] a
[WARNING] c

これは、の前に次を追加するだけで、私の(Win7)マシンで動作するように簡単に修正できますfor

set results=

出力には先頭の空白行が入りますが、 にデータを追加するときに条件を追加すると、きっと驚かれることでしょうresults

しかし、得られる出力の違いを考えると、それを機能させるには別のアプローチを取る必要があると思います. とにかく、これは改行で遊ぶよりもはるかに堅牢なはずです。

@echo off
setlocal
setlocal EnableDelayedExpansion

set showed_header=0
for /f "delims=" %%a in ('call mvn dependency:analyze ^| findstr "WARNING"') do (
   if !showed_header!==0 (
      set showed_header=1
      echo ------------------------------------
      echo FOUND MATCHES 
      echo ------------------------------------
   )

   echo %%a
)

if %showed_header%==1 (
   echo ------------------------------------
   echo ------------------------------------
   echo.
   echo.
)

を使用してテストされperl -e"print qq{[WARNING] a\nb\n[WARNING] c\n}"ました。

于 2013-02-25T10:55:30.320 に答える