如何在Windows 7命令行中编写类似linux的循环?
for docker_path in `ls | grep "docker$"`
do
cd $docker_path
mvn -B -f pom.xml clean deploy -Pdocker
cd ..
done
我需要找到所有* docker /目录,exec有mvn-command并返回到patern目录,但对于Windows7系统。
答案 0 :(得分:1)
在Windows命令行上使用:
for /D %I in (*docker) do @pushd "%I" & mvn.exe -B -f pom.xml clean deploy -Pdocker & popd
如果mvn
不是可执行文件,而是* .bat或* .cmd文件,请使用以下命令行:
for /D %I in (*docker) do @pushd "%I" & call mvn.bat -B -f pom.xml clean deploy -Pdocker & popd
好吧,在命令提示符下,没有必要使用命令 CALL 在循环中运行批处理文件以及其他两个命令。
批处理文件中使用的第一个命令行:
@for /D %%I in (*docker) do @pushd "%%I" & mvn.exe -B -f pom.xml clean deploy -Pdocker & popd
在批处理文件中,循环变量I
必须以两个百分号引用,而不是仅在命令提示符下引用一个。循环变量只能是一个字符。
批处理文件中使用的第二个命令行:
for /D %%I in (*docker) do @pushd "%%I" & call mvn.bat -B -f pom.xml clean deploy -Pdocker & popd
在批处理文件中,必须使用命令 CALL 调用另一个批处理文件,并在执行另一个批处理文件后继续执行下一个命令分别命令行当前批处理文件批处理文件已完成。
Windows命令处理器cmd.exe
继续在不使用命令 CALL 上的其他批处理文件上执行当前批处理文件并退出完成其他批处理文件的执行后批处理文件处理,而不在当前批处理文件中进一步处理命令行。
有关从批处理文件中运行批处理文件的现有方法的详细信息,请参阅How to call a batch file that is one level up from the current directory?上的答案。
单个命令行也可以用多行编码:
@echo off
for /D %%I in (*docker) do (
pushd "%%I"
mvn.exe -B -f pom.xml clean deploy -Pdocker
popd
)
mvn
的情况下,同一个多行批处理文件解决方案是一个批处理文件。
@echo off
for /D %%I in (*docker) do (
pushd "%%I"
call mvn.bat -B -f pom.xml clean deploy -Pdocker
popd
)
命令 FOR ,选项/D
使用通配符模式*docker
搜索当前目录中非隐藏目录,其目录名以字符串docker
结尾。< / p>
建议在Windows上引用要使用完整文件名执行的文件,即文件名+文件扩展名。这使得Windows命令处理器以及代码的每个读者都清楚,如果执行的文件是可执行文件或脚本文件,这可以在这里看到它。
要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。
call /?
echo /?
for /?
popd /?
pushd /?
另见: