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

問題は、私がコマンドを実行していたことでした

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 に答える
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 に答える
0

私はこれが古いスレッドであることを知っていますが、私にはうまくいかなかった答えを探すのに何時間も費やしました。これはこの質問に対する最も人気のある答えの1つであり、ここに投稿します。

(使用中または使用中のsintax)が非常に厳しいことに気づきました。そのため、SublimeやNotepad ++などのエディターを使用して)、500行のバッチで1つのスペース文字のすぐ隣に1つのスペース文字があり、@echo offステートメントが破棄されていることがわかりました。

言い換えると(*行末のスペースを視覚的に表すために使用されます):

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

*または**のいずれかは、混乱@echo offし、コードのすべての行をコンソールに出力します。

行末に不要な文字がないことを確認してください。

乾杯

于 2017-10-26T15:17:59.630 に答える