【问题标题】:.bat to run all .bat in a sub folder.bat 运行子文件夹中的所有 .bat
【发布时间】:2014-01-22 07:42:28
【问题描述】:

我想创建一个批处理文件 (run.bat) 来执行名为 execute 的子目录中的所有文件。

我在这里看到了一些示例,但没有成功根据我的要求定制它们。

run.bat,它的子文件夹可能在任何地方。所以需要一个相对文件夹引用。

例如

  • c:\somelocation\ 包含run.bat
  • c:\somelocation\execute\ 包含我要运行的所有其他批处理文件

能够以 30 秒的间隔启动它们也很棒。

.bat 编程对我来说完全陌生,因此我们将不胜感激。

【问题讨论】:

    标签: batch-file


    【解决方案1】:

    这使用了相关文件夹并增加了延迟。

    @echo off
    for %%a in ("execute\*.bat") do (
       pushd "%%~dpa"
       call "%%~nxa"
       timeout /t 30 /nobreak >nul
       popd
    )
    pause
    

    【讨论】:

    • 我无法让它工作。运行 bat 只会闪现一个 CMD 窗口,并不会在子文件夹中运行我的测试 bat。
    • pause 命令作为最后一行。如果您使用的是 XP 或更早版本,那么您将没有 timeout 命令,而必须使用 ping。
    • Pause 使第一个 shell 窗口保持打开状态,但子文件夹中的任何 .bat 都没有运行(它们也有暂停)。仅供参考,我在 Win7 上。
    • 谢谢,但我得到了相同的结果
    • 您在复制和粘贴时出错。它工作正常。或者你的文件夹没有调用execute,或者execute文件夹中没有bat文件。如果您在屏幕上看到错误消息,请告诉我它们是什么。
    【解决方案2】:
    @echo off
    pushd c:\somelocation\execute
    for /f "delims=" %%x in ('dir /b /a-d *.bat') do start "" "%%x"&timeout /t 30 >nul
    popd
    

    应该完成工作。切换到该位置,执行每个.bat文件,每个启动后等待30秒。


    编辑:是的,应该是timeout 而不是choice。带choice,需要参数/t 30 /d y

    【讨论】:

    • 非常感谢。但这与 run.bat 无关,也许我们需要使用 %~dp0,如提到的 here
    • 我做了那个改变(pushd %~dp0\execute)并且它起作用了。但是 run.bat 有错误ERROR: Invalid syntax. /T can be specified only when /D is specified. Type "CHOICE /?" for usage.
    • 也没有遵守 30 秒的暂停。我的两个测试批处理文件同时运行。我认为这与错误有关。
    • 啊 - 你的相对目录 - 使用 .\execute%~dp0 表示“批处理所在的目录”。如果您在提示符下键入path,您将看到一个以分号分隔的目录列表。如果可执行文件不在当前目录中,这是用于定位可执行文件的文件列表。选择任何然后运行yourbatchname 将执行批处理,而不管您当前的目录是什么——您不需要到处都需要它。如果您大量使用批处理,您可以考虑添加一个特殊目录(batch 很流行,belfry 也很流行)并将您的path 设置为包含该目录。
    • 你说的大部分我都听不懂。尽管如此,我还是尝试了.\execute,结果相同。它有效......但出现上述错误并且没有 30 秒的暂停。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 2020-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多