如何在一个批处理文件中从一个源文件夹执行两个 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 获取程序文件目录