2

我正在搜索某些 XML 文件,然后对它们执行命令 ( mvn),该命令将输出写入tree.out文件。如果这个文件是空的,那么我知道没有输出(来自mvn),所以我不打印它。

然而,在循环执行的第一部分之后,它会打印出来set size,然后简单地打印出下一个循环迭代的命令。

setlocal enabledelayedexpansion
set pomFiles=dir /s/b pom.xml
@echo off

for /f %%f in ('%pomFiles%') do (
    findstr "<packaging>pom</packaging>" %%f > nul
    if errorlevel 0 if not errorlevel 1 (
        cd "%%~dpf"
        mvn -q dependency:tree -Dincludes^=%dependency% -DoutputFile^="%%~dpftree.out"
        for /f %%i in ("%%~dpftree.out") do set size=%%~zi
        if !size! gtr 0 (
            type "%%~dpftree.out"
        )
        del "%%~dpftree.out"        
    )
)

我认为我的代码中存在导致语句打印的错误,但我自己看不到问题所在。

4

3 回答 3

1

for /ffor 文件的语法是

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]

但在您的代码中,文件集是("%%~dpftree.out")用于字符串的。

要使用双引号,我认为您必须使用 usebackq 选项:

for /f "usebackq" %%i in ('%%~dpftree.out') do set size=%%~zi

希望这可以帮助

于 2013-02-04T09:57:17.337 回答
1

问题是我正在运行命令

mvn -q dependency:tree -Dincludes^=%dependency% -DoutputFile^="%%~dpftree.out"

没有在它之前使用关键字调用

使用

call mvn -q dependency:tree -Dincludes^=%dependency% -DoutputFile^="%%~dpftree.out"

停止正在打印的命令。

于 2013-02-25T10:28:00.827 回答
0

我知道这是一个旧线程,但我花了几个小时寻找一个对我不起作用的答案,这是这个问题最受欢迎的答案之一,我会在这里发布。

我注意到使用()正在使用的 sintax 非常严格。)因此,使用 Sublime 或 Notepad++ 之类的编辑器,我在一个 500 行的批处理中发现了一个空格字符,它抛出了该@echo off语句。

换句话说( * 用于直观地表示行尾的空格):

IF %randomvar% EQU 1 (*
    goto DO 
) ELSE (
    goto DOELSE
)**

* 或 ** 都会弄乱@echo off,并将每一行代码输出到控制台。

只要确保行尾没有任何不必要的字符即可。

干杯

于 2017-10-26T15:17:59.630 回答