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