Windows批处理命令以exception方式移动目录中的所有文件夹

我正在尝试编写一个Windows Batch文件,该文件将允许我将给定源目录中的所有目录移动到该源目录中存在的目标目录中。

很明显,我的移动命令只需要应用于目录,也排除了正在处理的目标目录。

这是可能的Windows批处理命令?

Robocopy (出现在最新版本的Windows或从WRK下载)可以做到这一点,只需使用/xd开关从目录中排除目录;

 robocopy c:\source\ c:\source\target\ *.* /E /XD c:\source\target\ /move 
 FOR /d %%i IN (*) DO IF NOT "%%i"=="target" move "%%i" target 

这是行不通的 – 即使你明确地排除目标目录,你也会得到一个错误,告诉你目标目录在源目录内。 你可以做的是将目录移动到不在源代码之下的临时位置,然后将它们移动到目标中。

顺便说一句,使用move命令不会让你指定要排除的文件夹。 为此,您可以使用xcopy ,但请注意,它将复制文件夹,而不是移动它们。 如果有问题,你可以删除任何你想要的东西,只要确保你不删除目标目录,在源代码目录…

使用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。

这适用于我:

 move c:\fromDir\*.* c:\toDir\ 

注意:上面提到的使用/ move标志的Robocopy会复制这些文件,然后将它们从源文件夹中删除而不是移动文件。 如果将大量文件从同一磁盘上的一个位置移动到另一个位置(这是因为移动实际上是瞬间的,而复制操作要慢得多)