将一个新的行字符添加到for循环Windows批处理中的变量
问题描述:
我循环执行命令的结果并将它们全部附加到该循环中的一个变量(!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
------------------------------------
------------------------------------
答
要得到它运行在所有,我不得不添加一些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}"
进行测试。
你能举一个简短的例子说明你正在得到什么,你想要什么? – ikegami 2013-02-25 10:08:32
当然,增加了一个例子。 – Alex 2013-02-25 10:14:03