2013-02-25 44 views
1

我循环执行命令的结果并将它们全部附加到该循环中的一个变量(!results!)。在循环结束时,如果结果不是空的,然后我打印它们。我希望每个结果出现在新行中。将一个新的行字符添加到for循环Windows批处理中的变量

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

你能举一个简短的例子说明你正在得到什么,你想要什么? – ikegami 2013-02-25 10:08:32

+0

当然,增加了一个例子。 – Alex 2013-02-25 10:14:03

回答

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

+0

已更新(但代码保持不变)。 – ikegami 2013-02-25 11:13:14

+0

谢谢!我很感兴趣,你有原始版本的工作。对不起,我忘了从代码中复制'set results ='。即使在'setlf = ^'下面有'setlocal'命令和两个空行,它似乎也不能工作...... – Alex 2013-02-25 11:13:51

+0

自从'set lf = ^以来'for'循环根本不适用于我, '正在吃它。我不知道'^',所以我非常困惑。添加第二个空白行工作。也许MS修复了一个问题?我正在使用Win7。 – ikegami 2013-02-25 11:15:48

相关问题