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