我正在搜索某些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"
)
)
我认为我的代码中存在导致语句打印的错误,但我无法看到自己的问题。
答案 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
并将每行代码输出到控制台。
请确保在行尾没有任何不必要的字符。
干杯