【问题标题】:Several for loops in batch script do not work批处理脚本中的几个 for 循环不起作用
【发布时间】:2015-10-22 11:52:04
【问题描述】:

我有简单的脚本:

@echo off
set back=%cd%

for /d %%i in (dir1\*) do (
    cd %%i
    ant clean compile deploy
    cd %cd%
)

for /d %%i in (dir2\*) do (
    cd %%i
    ant clean compile deploy
    cd %cd%
)

应该在 dir1 和 dir2 的每个子文件夹中运行 一些命令。但是:

  1. 当我运行脚本时,只执行第一个 for 循环。如何让第二个循环也运行?

  2. 另外,@echo off 似乎仅适用于循环的第一次迭代,以及其他所有显示:

    C:*\桌面>( cd dir1\文件夹 一些命令 cd C:*\桌面\ )

【问题讨论】:

  • 脚本对我来说工作正常。 some command 到底是什么? echo %%i 工作正常。
  • 正如 Dmitry 所说,错误必须是由*some command* 引起的。请给我们代码!
  • 另外,不要将当前目录存储为%back%,而是使用pushdpopd。您还应该引用您的路径,以防它们包含空格或&符号或其他批处理脚本道路危险。示例:set "back=%cd%"cd "%%~i"
  • 你说得对,它可以与其他命令一起正常工作,但是当我使用“ant clean compile deploy”时,它会在第一个文件夹之后停止。

标签: windows batch-file


【解决方案1】:

根据上面的建议,您的代码应如下所示。

@echo off

for /d %%i in (dir1\*) do (
    pushd "%%~i"
    call ant clean compile deploy
    popd
)

for /d %%i in (dir2\*) do (
    pushd "%%~i"
    call ant clean compile deploy
    popd
)

【讨论】:

  • 不推送 "%%~i" 存储目录 dir1\somefolder\ ?如果我需要回到 dir1\ 我不应该使用 pushd dir1 吗?
  • 很好,它应该如何工作,但我必须阅读更多关于这些命令的信息,感谢您的帮助
  • @pierdut,POPD 让它回到堆栈中的上一个目录。
  • 但为什么要推送“%%~i”?这不是一些“更深”的目录,dir1 或 dir2 中的文件夹吗?那么为什么 popd 将目录更改为脚本所在的文件夹呢?
  • @pierdut,打开 ECHO 并在其中放置一些暂停,然后观察它的执行。你甚至不需要你的 ANT 命令。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-03
  • 2023-03-06
  • 2011-02-05
  • 2013-10-01
  • 1970-01-01
  • 2022-10-23
  • 2020-11-13
相关资源
最近更新 更多