【问题标题】:Batch process all files in directory批处理目录中的所有文件
【发布时间】:2011-04-12 21:48:01
【问题描述】:

现在我编写了一个批处理作业,它调用另一个文件并传入可执行文件需要运行的变量(密码和文件名)。

例如:

> cd f:\test\utils 
> admin import-xml -Dimport.file=f:\DB\file1.xml  -Dadmin.db.password=test123

我写了一份工作,但发现会有多个文件。

用户名和密码永远不会改变,但文件名会因 15 个不同的 xml 文件而有所不同——可能还会有更多。

文件将始终位于同一文件夹中。我可以写一些东西来处理位于该目录中的每个文件,而不是最终完成 15-20 个作业(每个文件一个)。或者等到一个完成后再下一个,或者我可以在它开始下一个文件之前添加一个 3 分钟的睡眠。

【问题讨论】:

    标签: windows batch-file cmd


    【解决方案1】:
    pushd C:\test\utils
    for %%F in (F:\DB\*.xml) do (
       admin import-xml "-Dimport.file=%%~dpnxF" -Dadmin.db.password=test123
    )
    popd
    

    %%~dpnxF 扩展为 d‎rive、p‎ath、base‎n‎ame 和 e‎x ‎当前文件的张力。

    如果您打算在该循环中设置使用环境变量 (%foo%),请在遇到麻烦之前先阅读help set

    【讨论】:

    • 太棒了。能够使用它来实现我所需要的。谢谢。
    • 你能解释一下如何避免for循环中使用set的麻烦吗?
    • Snekse,神奇的词有延迟变量扩展。这是我必须在我给出的第二个批处理文件答案中解释的内容。 help set 也有很好的解释。
    • 感谢您的编辑,美味便当。这确实是正确的(但我冒昧地更改了变量名以使其更易于理解);唉,有许多评论者不知道他们在评论什么,谁拒绝了它。致那些审阅者:如果您不理解某个编辑,您可以跳过审阅它并将其留给那些理解它的人。你们都没有任何可见的批处理文件经验(至少在 SO 上)。
    【解决方案2】:

    您可以使用for 命令。批处理文件中的类似内容:

    for %%f in (*.xml) do call myotherbatch.bat %%f
    

    假设您正在运行的admin 命令在作业完成之前不会返回,那么上述循环将按顺序处理它们。

    如果您在提示符下运行命令(而不是在批处理文件中),请仅使用单个 %。

    【讨论】:

      【解决方案3】:
      for file in f:\DB\*
      do
         admin import-xml -Dimport.file="$file" -Dadmin.db.password=test123
      done
      

      【讨论】:

        猜你喜欢
        • 2012-07-27
        • 2011-10-13
        • 2019-05-20
        • 1970-01-01
        • 1970-01-01
        • 2017-01-22
        • 1970-01-01
        • 2023-03-12
        相关资源
        最近更新 更多