【问题标题】:Execute a file in multiple folders执行多个文件夹中的文件
【发布时间】:2015-01-04 14:00:52
【问题描述】:

我需要一个命令 BACH 来允许我将一个文件运行到多个文件夹。此可执行文件已复制到这些文件夹中。

for /D %i in (C:\Teste\*) do Paint.bat %i

上面的命令这样做了,但是,他运行了包含在文件夹“test”中的paint.bat,而不是正确的。

子文件夹已经包含一个 paint.bat 的副本。我需要一个命令来执行这些副本中的每一个。它是同一个文件,但是,它需要在每个文件夹中运行。

【问题讨论】:

    标签: batch-file cmd cmdlets


    【解决方案1】:

    您的代码不会切换工作文件夹,您的代码总是从一个地方调用 Bat 文件。试试这个

    for /D %i in (C:\Teste\*) do pushd .&cd "%i"&call Paint.bat %i&popd
    

    现在我无法检查这个,但我认为它确实有效:

    • 记住堆栈中的当前文件夹(pushd。)
    • 将当前文件夹切换到 %i 的值
    • 执行Paint.Bat(必须放在每个子文件夹中)
    • 从堆栈中恢复当前文件夹 (popd)

    这个脚本不是递归的,只会遍历子文件夹。 请原谅我的英语。

    【讨论】:

    • Excelente...但是...如何防止它执行已执行文件夹的功能?如果我在“测试”中创建一个新文件夹,它们的功能将在所有文件夹中再次执行。我希望它只在“测试”中添加的每个新文件夹上执行
    • 最简单的方法是删除脚本(在CALL之后添加del /Q Paint.bat)。那么它的调用就会失败。
    【解决方案2】:

    嗯... 我说得对吗:

    FOR /D %I IN ("Anyfolder\*") DO 
    

    : %I 将是“Anyfolder”中每个子文件夹的完全限定路径(不是更深)。 您要执行位于每个文件夹中的文件“paint.bat” - 并且paint.bat 应该以它所在文件夹的完全限定路径开始?

    不就是这样吗:

    FOR /D %I IN ("Anyfolder\*") DO "%~I\paint.bat" "%~I"
    

    ? 也许你必须在之前指定一个开始:

    FOR /D %I IN ("Anyfolder\*") DO START "" "%~I\paint.bat" "%~I"
    

    (如果不使用双引号或设置窗口标题,Start 有时会出现问题。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-28
      • 2016-04-08
      • 2014-05-11
      • 2021-01-08
      • 2019-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多