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 回答