如何在一个批处理文件中从一个源文件夹执行两个 ROBOCOPY 语句到两个目标文件夹?

Posted

技术标签:

【中文标题】如何在一个批处理文件中从一个源文件夹执行两个 ROBOCOPY 语句到两个目标文件夹?【英文标题】:How to perform two ROBOCOPY statements from one source folder to two destination folders in one batch file? 【发布时间】:2021-03-26 00:01:22 【问题描述】:

我有一个有趣的情况,我想将一些文件从目录 X 移动到目录 Y,但是为了在不删除源文件夹的情况下移动文件,我在所述文件夹中创建了一个日志语句。我正在做的一个非常简单的版本是这样的:

robocopy 
    "C:\Desktop\Origin" "C:\Desktop\Destination" 
    /e /move /XF "C:\Desktop\Origin\test.log" 
    /log:"C:\Desktop\Origin\test.log"

这会导致将“Origin”目录中的所有文件移动到“Destination”目录,并且不会像“/e /move”标志通常那样摆脱“Origin”目录。现在,如果我不想要那个日志文件,我可以简单地将这一行添加到代码中:

del "C:\Desktop\Origin\test.log"

但是,我确实想保留这个日志文件。我只是想在别的地方。所以我一直在尝试做的是用“/e /mov”甚至只是“/s”将它移动到目录Z,然后删除。例如:

robocopy 
    "C:\Desktop\Origin" "C:\Desktop\Destination" 
    /e /move /XF "C:\Desktop\Origin\test.log" 
    /log:"C:\Desktop\Origin\test.log"
robocopy
    "C:\Desktop\Origin" "C:\Desktop\Destination 2" 
    /s
    del "C:\Desktop\Origin\test.log"

但经过多次尝试,有多个小变化,似乎什么都没有发生。第一个 robocopy 发生了,但第二个似乎根本没有发生。似乎多个 robocopy 语句可以在一个批处理文件中运行(这是我想要的),但可能不是来自同一个源目录。有谁知道为什么会这样,以及如何实现我的既定目标?谢谢!

【问题讨论】:

使用move "C:\Desktop\Origin\test.log" "C:\Desktop\Destination 2" 代替 RoboCopy 有什么问题?或者甚至更好,只是让 RoboCopy 首先通过将 /log 更改为该文件夹将日志直接写入 "C:\Desktop\Destination 2\test.log" 您好,Ken,感谢您的建议。原因是我试图将原始文件(包括子目录及其文件)从“Origin”移动到“Destination”,并使用 /E /MOVE 删除原始文件夹。将日志文件转到“Origin”意味着源目录不会被删除(我相信可以防止它被删除)。使用 "C:\Desktop\Origin\test.log" "C:\Desktop\Destination 2" /MOVE 也会摆脱源目录,这是我试图阻止的。 但是,/MOV 可以工作,但是当我在第二个 Robocopy 中使用它时,它仍然无法工作。如前所述,原因似乎是因为我从同一来源复制了两次......但我不确定。 不,我说的不是把日志写到Origin文件夹,而是直接输出到Destination 2,把/log:"C:\Desktop\Origin\test.log"改成/log:"C:\Desktop\Destination 2\test.log。我建议的 move 不是 RoboCopy 开关 - 它是 Windows 附带的命令行 move.exe 实用程序。在命令提示符下键入 move /? 以获取更多信息。 是的,我知道您是说直接将日志文件写入“目的地 2”。我有意将日志文件写入“Origin”,以便在应用 /MOVE /E 开关时不会删除“Origin”。那有意义吗?这里有对这种技术的引用:(serverfault.com/questions/167723/…)。我将调查 move.exe 命令。感谢您的帮助,我对 CMD 提示符、Robocopy 等完全陌生。 【参考方案1】:

感谢 Ken White 的建议,我找到了解决方案。如果您使用 MOVE.EXE,它会按预期工作。

robocopy 
    "C:\Desktop\Origin" "C:\Desktop\Destination" 
    /e /move /XF "C:\Desktop\Origin\test.log" 
    /log:"C:\Desktop\Origin\test.log"
move
    "C:\Desktop\Origin\test.log" "C:\Desktop\Destination 2"

需要注意的是,您不能使用 /LOG+: 使用此方法,因为您会将日志文件写入不存在日志文件的位置,因为它之前已移动到“目标 2” .但是,即使是普通的日志文件也包含目录中已经存在的 *EXTRA 文件。

【讨论】:

以上是关于如何在一个批处理文件中从一个源文件夹执行两个 ROBOCOPY 语句到两个目标文件夹?的主要内容,如果未能解决你的问题,请参考以下文章

如何在文件处理中从文本文件中找到每一行的最小值和最大值?

在 Borland C++ 6 中从 Windows 获取程序文件目录

如何将 gradle 生成的源文件夹添加到 Eclipse 项目?

目标文件夹和源文件夹相同

如何访问位于源文件夹中的 Jar 文件?

如何在 Python 中从数据库创建 CSV 文件?