Batch file 执行mvn调用后,循环的批处理更改行为

Batch file 执行mvn调用后,循环的批处理更改行为,batch-file,Batch File,以下脚本在C:\develope\gitrepos\project1文件夹中执行,目的是更新所有子文件夹git repos并在必要时构建源代码,它一直工作到第一次执行mvn调用,一旦该调用返回所有后续for循环处理,则“if!”!首先!…'语句不执行,只输出到控制台 还要注意的是,在早期版本的脚本中,最后第三行只做了一张cd..,但在这个版本的脚本中,如果我这样做,我将转到C:\这真是令人困惑 在mvn执行之后,是否有任何方法可以使for循环继续正常执行 @echo off setlocal e

以下脚本在C:\develope\gitrepos\project1文件夹中执行,目的是更新所有子文件夹git repos并在必要时构建源代码,它一直工作到第一次执行mvn调用,一旦该调用返回所有后续for循环处理,则“if!”!首先!…'语句不执行,只输出到控制台

还要注意的是,在早期版本的脚本中,最后第三行只做了一张cd..,但在这个版本的脚本中,如果我这样做,我将转到C:\这真是令人困惑

在mvn执行之后,是否有任何方法可以使for循环继续正常执行

@echo off
setlocal enabledelayedexpansion
@for /D %%f in ("*") do @(
        @cd %%f
        @if exist pom.xml @(
                @if exist .git @(
                        echo pulling %%f
                        REM we only want to check the first line
                        set first=T
                        for /F "delims=" %%I in ('git pull --prune') do (
                                if !first!==T (
                                        set first=F
                                        if "%%I"=="Already up-to-date." (
                                                echo         %%f is already up-to-date
                                        ) else (
                                                REM when mvn executes it breaks subsequent for /F do calls
                                                REM the if !first! ... statement is not executed, it is simply
                                                REM output to the console as if it were an echo
                                                (mvn clean install -DskipTests)
                                        )
                                )
                        )
                )
        )
        @cd C:\develop\gitrepos\project1
)
echo on

使用
调用mvn…
,仅此而已

说明: mvn本身就是一个批处理文件

从另一个批处理文件启动批处理文件,会停止调用方脚本,并且不会返回调用方

但是您在FOR循环中使用了命令块,并且命令块被缓存,因此FOR循环本身继续循环(即使不返回调用方脚本)

但当mvn结束时,批处理上下文也会结束。
然后,
cmd.exe
使用命令行上下文,规则略有不同。
并再次启用模式下的
回显


调用批处理文件时需要使用
call
,然后返回机制会按预期工作。

哇,在过去的几天里,我每天早上都在忙这个-谢谢