首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将一个目录树的内容移动到另一个目录树中?

如何将一个目录树的内容移动到另一个目录树中?
EN

Stack Overflow用户
提问于 2009-07-13 09:48:37
回答 12查看 86.6K关注 0票数 23

我有一个目录,其中包含文件和若干级别的子目录:

代码语言:javascript
运行
复制
C:\Source

我想将C:\Source的内容移到:

代码语言:javascript
运行
复制
C:\Destination

要求:

  • 所有文件和C:\SourceData中的所有子目录都必须移动
  • 我将在批处理文件
  • 中运行该命令,我不能使用Powershell或任何其他脚本语言

尝试0

代码语言:javascript
运行
复制
XCOPY /E "C:\Source" "C:\Destination"

这是完美的工作,但它复制而不是移动。我无法复制,然后删除源代码,因为我正在移动一组非常大的文件,并且没有足够的磁盘空间一次拥有两个副本。

尝试1

代码语言:javascript
运行
复制
MOVE "C:\Source" "C:\Destination"

这会将整个C:\源目录移动到C:\目的地,因此我最终得到:

代码语言:javascript
运行
复制
C:\Destination\Source

尝试2

this question and accepted answer的帮助下,我想到了:

代码语言:javascript
运行
复制
for /r "C:\Source" %%x in (*) do move "%%x" "C:\Destination"

这会将文件移动到C:\Source中,而不是子目录或它们的内容。注意,我在批处理文件中使用%x而不是%x。

使用FOR似乎很有希望,但我不确定是否使用了正确的语法?我错过了什么吗?

尝试3

按照尼克·D的建议,我试着重命名:

重命名"C:\Source“目的地

对于示例场景,我给出了很好的效果。不幸的是,我的真正目标目录与源目录处于不同的级别,似乎不支持:

代码语言:javascript
运行
复制
C:\>REN /?
Renames a file or files.

RENAME [drive:][path]filename1 filename2.
REN [drive:][path]filename1 filename2.

Note that you cannot specify a new drive or path for your destination file.

我得到“命令的语法是不正确的。”如果我试图指定更复杂的目标路径,例如:

代码语言:javascript
运行
复制
RENAME "C:\Source" "C:\MyOtherDirectory\Destination"
RENAME "C:\Source" "MyOtherDirectory\Destination"
EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2009-07-13 10:20:11

更新

调整代码到a.检查目标处是否已经存在文件夹,在这种情况下,将该文件夹中的文件移到上面(并继续遍历源目录结构),否则会大量移动该文件夹。

在脚本的末尾,源文件夹被完全删除,以消除这些文件夹,这些文件夹已经将它们的文件移到目标处已经存在的文件夹中(这意味着这些文件夹已经清空,而不是在源处被删除)。

此外,我们检查文件夹是否都是空的,并且是否已经存在于目的地,在这种情况下,我们什么也不做(并将源文件夹删除到脚本的最后一行)。不这样做会导致“文件名、目录名或卷标签语法不正确”。错误。

呼!请告诉我你是怎么处理这件事的!我对此进行了测试,似乎效果很好。

代码语言:javascript
运行
复制
for /d /r "c:\source" %%i in (*) do if exist "c:\destination\%%~ni" (dir "%%i" | find "0 File(s)" > NUL & if errorlevel 1 move /y "%%i\*.*" "c:\destination\%%~ni") else (move /y "%%i" "c:\destination")
move /y c:\source\*.* c:\destination
rd /s /q c:\source  
票数 11
EN

Stack Overflow用户

发布于 2009-07-13 10:29:44

毫无疑问,使用机器人复制。这是一个简单但非常有用的工具。

代码语言:javascript
运行
复制
robocopy /move /e sourcedir destdir

这将移动所有文件和文件夹,包括空文件,在移动每个原始文件后删除它。

如果您没有安装机器人副本,您可以自己下载,也可以作为Microsoft资源工具包的一部分下载。

票数 36
EN

Stack Overflow用户

发布于 2017-06-08 14:39:21

对于ufukgun的答复:

代码语言:javascript
运行
复制
xcopy C:\Source\* C:\Destination\* /s /e /i /Y

/s -复制目录和子目录,空目录除外。

/e -复制目录和子目录,包括空目录。与/S /E相同,可用于修改/T。

/i -如果目标不存在并复制多个文件,则假定目标必须是一个目录。

/y -取消提示以确认您想要覆盖现有的目标文件。

正如另一个答案所述,使用xcopy可能不像只更改文件系统中的指针的本机迁移命令那么高效。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1118540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档