我有一个目录,其中包含文件和一些级别的子目录:
C:\Source
我想将C:\ Source的内容移动到:
C:\Destination
要求:
尝试0
XCOPY /E "C:\Source" "C:\Destination"
这完美的作品,但它复制而不是移动。 我无法复制,然后删除源文件,因为我正在移动一大堆文件,而且没有足够的磁盘空间来同时拥有它们的两个副本。
尝试1
MOVE "C:\Source" "C:\Destination"
这将整个C:\ Source目录移动到 C:\ Destination,所以我最终得到:
C:\Destination\Source
尝试2
在这个问题和接受的答案的一些帮助下,我想出了:
for /r "C:\Source" %%x in (*) do move "%%x" "C:\Destination"
这将移动C:\ Source中的文件,但不移动子目录或其内容。 请注意,我使用%% x而不是%x,因为我在batch file中使用它。
使用FOR似乎很有前途,但我不确定我是否使用了正确的语法? 我错过了什么吗?
尝试3
正如Nick D所build议的,我尝试重新命名:
重命名“C:\ Source”目标
对于示例场景,我给这个工作正常。 不幸的是,我真正的目的地目录与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.
我得到“命令的语法不正确。” 错误,如果我尝试指定一个更复杂的目标path,例如:
RENAME "C:\Source" "C:\MyOtherDirectory\Destination" RENAME "C:\Source" "MyOtherDirectory\Destination"
更新 :
调整后的代码到一个。 检查目标文件夹是否已经存在,在这种情况下,移动该文件夹中的文件(并继续遍历源目录结构),否则移动批量文件夹。
在脚本结尾处,源文件夹将被完全删除,以消除已将其文件移到目标文件夹中已存在的文件夹(意味着这些文件夹已被清空但未被删除的文件夹)的文件夹。
另外,我们检查一个文件夹是否都是空的,并且已经存在于目的地,在这种情况下,我们什么也不做(把源文件夹留在脚本的最后一行)。 不这样做会导致“文件名,目录名称或卷标语法不正确”。 错误。
唷! 请让我知道你如何继续下去! 我已经测试了这个,它似乎运作良好。
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 /yc:\source\*.* c:\destination rd /s /qc:\source
毫无疑问使用robocopy。 这是一个简单但非常有用的工具。
robocopy /move /e sourcedir destdir
这将移动所有的文件和文件夹,包括空的,删除每个原始文件后,它已经移动。
如果您没有安装robocopy,可以单独下载,也可以将其作为Microsoft资源工具包的一部分下载。
由于XCOPY的工作,你可以使用XCOPY和DELETE,这是一个解决方法,但应该工作?
在Vista上使用
robocopy源目标/ MIR / MIR ..镜像一个完整的目录树(也删除目标文件)
其他
XCOPY
当然你必须删除源码:)
我有一个目录,其中包含文件和一些级别的子目录:
C:\源
我想将C:\ Source的内容移动到:
C:\目的地
也许我错过了一些东西,但不能只是重命名文件夹?
在Twitter上发送:尝试将尝试3与尝试1结合。重命名以获取目标文件夹正确,然后将“目标”移动到正确的位置。
@echo on set SOURCE=C:\Source set DESTINATION=C:\Destination xcopy %SOURCE%\* %DESTINATION%\* /s /e /i /Y PAUSE
我使用这样的批处理文件…
或者直接致电:
xcopy C:\Source\* C:\Destination\* /s /e /i /Y
也许有点脱离主题,但仍然有用:
有些人建议只复制+删除源文件,但移动文件是不一样的复制+删除!
使用(x)复制功能时,可以在硬盘上的同一卷上分配新空间 。 复制文件后, 旧文件(文件所需的旧分配空间)被标记为删除 。 虽然您将获得与最终用户相同的结果,但移动会产生不同的效果。
移动文件实际上只改变MFT (主文件表)中的一些记录。 这些更改只包含用户找到其文件的不同路径。 在物理上,这些文件仍然保留在硬盘上的相同扇区中。
我认为你能做的最简单的事情就是修改你的尝试2
从
MOVE "C:\Source" "C:\Destination"
至
MOVE "C:\Source\*" "C:\Destination"
KISS 😉
编辑 :这似乎不工作,所以我的建议是垃圾了蹩脚的DOS命令行和Cygwin与BASH作为壳! (或者只是将cygwin二进制文件添加到路径中,这样你就可以在DOS中使用mv
,因此不需要根据需求状态更改shell)。
如果你所要做的只是将一个目录和内容上移一层:
MOVE folder_you_wan_to_move ..
注意..指向下一个目录。
我使用了一个名为xxcopy的实用程序。 它可以移动文件,并有许多有用的选项,你可以像这样使用它:
xxcopy C:\Source C:\Destination /E /RC
选项:
/ E复制一切,甚至空文件夹
/ RC在每次成功复制后删除每个源文件
您可以从http://www.xxcopy.com/xcpydnld.htm下载免费的个人使用的xxcopy副本
针对ufukgun的回答:
xcopy C:\Source\* C:\Destination\* /s /e /i /Y
/ s – 复制空目录和子目录。
/ e – 复制目录和子目录,包括空目录。 与/ S / E相同。 可能会被用来修改/ T。
/ i – 如果目标不存在并复制多个文件,则假定目标必须是目录。
/ y – 禁止提示以确认您要覆盖现有的目标文件。
正如另一个答案所述,使用xcopy可能不如本地移动命令那样有效,因为它只会改变文件系统中的指针。