我有一个目录,其中包含文件和若干级别的子目录:
C:\Source我想将C:\Source的内容移到:
C:\Destination要求:
尝试0
XCOPY /E "C:\Source" "C:\Destination"这是完美的工作,但它复制而不是移动。我无法复制,然后删除源代码,因为我正在移动一组非常大的文件,并且没有足够的磁盘空间一次拥有两个副本。
尝试1
MOVE "C:\Source" "C:\Destination"这会将整个C:\源目录移动到C:\目的地,因此我最终得到:
C:\Destination\Source尝试2
在this question and accepted answer的帮助下,我想到了:
for /r "C:\Source" %%x in (*) do move "%%x" "C:\Destination"这会将文件移动到C:\Source中,而不是子目录或它们的内容。注意,我在批处理文件中使用%x而不是%x。
使用FOR似乎很有希望,但我不确定是否使用了正确的语法?我错过了什么吗?
尝试3
按照尼克·D的建议,我试着重命名:
重命名"C:\Source“目的地
对于示例场景,我给出了很好的效果。不幸的是,我的真正目标目录与源目录处于不同的级别,似乎不支持:
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.我得到“命令的语法是不正确的。”如果我试图指定更复杂的目标路径,例如:
RENAME "C:\Source" "C:\MyOtherDirectory\Destination"
RENAME "C:\Source" "MyOtherDirectory\Destination"发布于 2009-07-13 10:20:11
更新
调整代码到a.检查目标处是否已经存在文件夹,在这种情况下,将该文件夹中的文件移到上面(并继续遍历源目录结构),否则会大量移动该文件夹。
在脚本的末尾,源文件夹被完全删除,以消除这些文件夹,这些文件夹已经将它们的文件移到目标处已经存在的文件夹中(这意味着这些文件夹已经清空,而不是在源处被删除)。
此外,我们检查文件夹是否都是空的,并且是否已经存在于目的地,在这种情况下,我们什么也不做(并将源文件夹删除到脚本的最后一行)。不这样做会导致“文件名、目录名或卷标签语法不正确”。错误。
呼!请告诉我你是怎么处理这件事的!我对此进行了测试,似乎效果很好。
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 发布于 2009-07-13 10:29:44
毫无疑问,使用机器人复制。这是一个简单但非常有用的工具。
robocopy /move /e sourcedir destdir这将移动所有文件和文件夹,包括空文件,在移动每个原始文件后删除它。
如果您没有安装机器人副本,您可以自己下载,也可以作为Microsoft资源工具包的一部分下载。
发布于 2017-06-08 14:39:21
对于ufukgun的答复:
xcopy C:\Source\* C:\Destination\* /s /e /i /Y/s -复制目录和子目录,空目录除外。
/e -复制目录和子目录,包括空目录。与/S /E相同,可用于修改/T。
/i -如果目标不存在并复制多个文件,则假定目标必须是一个目录。
/y -取消提示以确认您想要覆盖现有的目标文件。
正如另一个答案所述,使用xcopy可能不像只更改文件系统中的指针的本机迁移命令那么高效。
https://stackoverflow.com/questions/1118540
复制相似问题