将新行字符附加到for循环Windows批处理中的变量

时间:2013-02-25 10:06:40

标签: batch-file append newline windows-scripting

我循环遍历命令的结果,并将它们全部附加到该循环中的一个变量(!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
------------------------------------
------------------------------------

1 个答案:

答案 0 :(得分:2)

为了让它完全运行,我不得不添加一些setlocal语句,并在set lf=^for之间添加额外的空白行。一旦我这样做,我实际上看到的输出不同于你:

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

只需在for之前添加以下内容即可轻松修复我的(Win7)计算机上的工作:

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}"进行测试。