使用@echo关闭批处理文件打印命令

时间:2013-02-04 09:46:54

标签: batch-file echo windows-scripting

我正在搜索某些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"        
    )
)

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

3 个答案:

答案 0 :(得分:1)

文件for /f的语法是

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

希望这有帮助

答案 1 :(得分:0)

问题在于我正在运行命令

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

不使用关键字调用

使用

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

停止了正在打印的命令。

答案 2 :(得分:0)

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

我注意到使用()时的sintax非常严格。因此,使用像Sublime或Notepad ++这样的编辑器,我发现一个)旁边有一个空格字符,在一个500行的批处理中,它放弃了@echo off语句。

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

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

无论是*还是**,都会混乱@echo off并将每行代码输出到控制台。

请确保在行尾没有任何不必要的字符。

干杯