繁体   English   中英

Windows 批处理命令移动目录中的所有文件夹,但有例外

[英]Windows batch command to move all folders in a directory with exceptions

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

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

这可以通过 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

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

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

这是行不通的 - 即使您明确排除目标目录,您也会收到错误消息,告诉您目标目录在源目录内。 您可以做的是将目录移动到不在源下的临时位置,然后将它们移动到目标中。

顺便说一句,使用move命令不会让您指定要排除的文件夹。 为此,您可以使用xcopy ,但请注意,它将复制文件夹,而不是移动它们。 如果这很重要,您可以在之后删除任何您想要的内容,只需确保不要删除源目录中的目标目录...

这对我有用:

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

在 Windows 批处理上:

FOR /d %%i IN (MySourceDirectory\*) DO move "%%i" MyTargetDirectory\%%~ni

上面的命令把在MySourceDirectory(/d)中找到的所有目录移动到MyTargetDirectory,使用原来的目录名(~ni) Robocopy的move是先复制,再删除,所以比较慢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM