Windows批处理命令:移动目录中所有文件夹(带有例外)

12

我正在尝试编写一个Windows批处理文件,它可以将给定源目录中的所有目录移动到该源目录内存在的目标目录中。

显然,我的移动命令只需要应用于目录,并排除目标目录不被处理。

这是否可以使用Windows批处理命令实现?

7个回答

14

Robocopy(在较新版本的Windows中提供,或者可以从WRK下载)可以实现此操作,只需使用/xd开关来排除目标目录即可复制。

robocopy c:\source\ c:\source\target\ *.* /E /XD c:\source\target\ /move

多个异常或多个要跳过的目录怎么办?请在您的回答中加入这些内容以改进它。 - Vicky Dev

7
FOR /d %%i IN (*) DO IF NOT "%%i"=="target" move "%%i" target

1
在Windows批处理中:
FOR /d %%i IN (MySourceDirectory\*) DO move "%%i" MyTargetDirectory\%%~ni

上述命令将找到的所有目录从MySourceDirectory (/d)移动到MyTargetDirectory,并使用原始目录名称(~ni)。Robocopy的move first先进行复制,然后再删除,因此速度较慢。

1

使用Windows 7自带的robocopy时,我发现/XD选项无法防止源文件夹被移动。

解决方案:

SET MoveDirSource=\\Server\Folder
SET MoveDirDestination=Z:\Folder
FOR /D %%i IN ("%MoveDirSource%\*") DO ROBOCOPY /MOVE /E "%%i" "%MoveDirDestination%\%%~nxi"

这将循环遍历顶级文件夹,并为每个文件夹运行robocopy。


1
注意:上述提到使用 /move 标志的 Robocopy 将复制文件,然后从源文件夹中删除它们,而不是移动文件。如果在同一磁盘上从一个位置移动大量文件,则此操作可能很关键(因为移动几乎是瞬间完成的,而复制是一个比较缓慢的操作)。

1

这样做是行不通的 - 即使你明确排除目标目录,你也会收到一个错误提示,告诉你目标目录在源目录内部或者类似的信息。你可以将目录移动到一个不在源目录下的临时位置,然后再将它们移动到目标位置。

顺便说一句,使用move命令无法让你指定要排除的文件夹。为此,你可以使用xcopy,但请注意它会复制文件夹,而不是移动它们。如果这很重要,你可以随后删除任何你想要删除的东西,只要确保不要删除目标目录,因为它位于源目录中...


0
这对我来说可行:
move c:\fromDir\*.* c:\toDir\

1
至少在winserver2012r2上,这仅适用于移动文件,而不是子目录,并且不涵盖任何“异常”选项。 - quetzalcoatl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接