【发布时间】:2011-09-18 12:09:18
【问题描述】:
我正在尝试编写一个 Windows 批处理文件,该文件允许我将给定源目录中的所有目录移动到该源目录中存在的目标目录中。
显然我的移动命令只需要应用于目录,并且还排除目标目录被处理。
这可以通过 Windows 批处理命令实现吗?
【问题讨论】:
标签: windows batch-file directory move
我正在尝试编写一个 Windows 批处理文件,该文件允许我将给定源目录中的所有目录移动到该源目录中存在的目标目录中。
显然我的移动命令只需要应用于目录,并且还排除目标目录被处理。
这可以通过 Windows 批处理命令实现吗?
【问题讨论】:
标签: windows batch-file directory 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。
【讨论】:
注意:上面提到的 Robocopy 使用 /move 标志将复制文件,然后从源文件夹中删除它们,而不是移动文件。如果将大量文件从同一磁盘上的一个位置移动到另一个位置,这可能很关键(因为移动几乎是即时的,而复制是一个慢得多的操作)
【讨论】:
在 Windows 批处理上:
FOR /d %%i IN (MySourceDirectory\*) DO move "%%i" MyTargetDirectory\%%~ni
上述命令使用原始目录名称将在 MySourceDirectory (/d) 中找到的所有目录移动到 MyTargetDirectory (~ni) Robocopy的move是先复制,再删除,所以比较慢。
【讨论】:
这对我有用:
move c:\fromDir\*.* c:\toDir\
【讨论】: