FOR / D终止失败(......此时意外)

时间:2017-02-13 11:34:52

标签: batch-file

我有一个.bat文件,这些行由Jenkins CI作业执行。除了两个匹配的IF条件外,它应该删除指定目录中的所有子目录。

SET EXPORT_ROOT=C:\WWW\LocalUser\myfolder
SET EXPORT_BUILD_ROOT=%EXPORT_ROOT%\build
SET EXPORT_BUILD_PATH=%EXPORT_BUILD_ROOT%\26
SET LAST_EXPORT_BUILD_PATH=C:\WWW\LocalUser\myfolder\build\25

cd %EXPORT_BUILD_ROOT%
FOR /D %G IN (*) DO (
    IF NOT ("%EXPORT_BUILD_ROOT%\%G" == "%LAST_EXPORT_BUILD_PATH%") IF NOT ("%EXPORT_BUILD_ROOT%\%G" == "%EXPORT_BUILD_PATH%") (
        rd /s /q "%G"
    )
)
cd "%DEPLOY_DIR%"

在Jenkins CI日志中,请参阅:

C:\WWW\LocalUser\myfolder\deploy>cd C:\WWW\LocalUser\myfolder\build
G" == "C:\WWW\LocalUser\myfolder\build\57") IF NOT ("EXPORT_BUILD_PATHG" ) ) was unexpected at this time.

C:\WWW\LocalUser\myfolder\build>FOR /D G" == "C:\WWW\LocalUser\myfolder\build\57") IF NOT ("EXPORT_BUILD_PATHG" ) )

构建步骤'执行Windows批处理命令'将构建标记为失败

2 个答案:

答案 0 :(得分:4)

你需要更改它:

FOR /D %%G IN (*) DO (
    IF /I NOT "%EXPORT_BUILD_ROOT%\%%G"=="%LAST_EXPORT_BUILD_PATH%" (
        IF /I NOT "%EXPORT_BUILD_ROOT%\%%G"=="%EXPORT_BUILD_PATH%" RD/S/Q "%%G")
)

您的括号的位置很重要,以及批处理文件中的 % 加倍。

答案 1 :(得分:2)

FOR /D %G IN (*) DO (
    IF NOT "%G" == "%LAST_EXPORT_BUILD_PATH%" IF NOT "%G" == "%EXPORT_BUILD_PATH%" (
        rd /s /q "%G"
    )
)

引用%G(循环控制变量)的每个metavariable必须为%%G