我正在循环一个命令的结果,并将它们全部附加到该循环中的一个变量(!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
------------------------------------
------------------------------------发布于 2013-02-25 10:55:30
为了让它运行,我必须添加一些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}"进行测试。
https://stackoverflow.com/questions/15064461
复制相似问题