如何将文件复制到DOS中的目录,并在必要时创建目录?


37

如何使用DOS命令将文件复制到可能不存在的目录结构中?如果该位置尚不存在,我需要能够强制创建指向目标文件位置的目录路径。

例如,此位置已经有一个file.txt:

C:\file.txt

我想复制到

C:\example\new\path\to\copy\of\file\file.txt

但是在这个时候

C:\example\

并且所有子目录可能存在也可能不存在。

基本上,我正在寻找“如有必要,复制并创建目标路径”命令。您会推荐什么是实现此目标的最佳方法?


这个问题实际上是关于DOS(或MS-DOS),还是关于在基于Windows的Windows版本(2000,XP,Vista,7、8,服务器)中找到的命令行?
鲍勃

我的意思是类似DOS的Windows CLI。您推荐什么是为帖子标题描述“类似于DOS的Windows CLI”的最佳方法?
nodmonkey 2012年

通常,我会Windows command line在标题/正文中使用标签窗口命令行(请注意,cmd.exe命令行的标签同义词)。标签ms-dos应该被删除;标签dos在任何情况下都不应使用。
鲍勃

但是,在这种情况下,由于现有的/可接受的答案是针对DOS / MS-DOS的,您不妨按原样保留它。为了将来参考,将DOS解释为操作系统。尽管Windows命令行基于它们,但仍存在一些显着差异。
鲍勃2012年

你可以把它叫做命令提示符
barlop

Answers:


28

是的,那是xcopy。外观如下:

xcopy file.txt c:\example\new\path\to\copy\of\file\file.txt

XCOPY信息位于

您可能还希望研究Vista,Windows 7和Server 2008中XP资源工具包和标准中的ROBOCOPY

robocopy . c:\example\new\path\to\copy\of\file file.txt

3
如果您不需要重命名文件,则xcopy很好。如果这样做,很遗憾,xcopy会询问您目标是目录还是文件名,并且没有命令行开关来指定“它是文件”。
RomanSt 2014年

4
查看其他答案- echo f | 与xcopy一起使用可自动回答此提示。
mcw0933 2014年

请注意,目标路径的末尾应有一个斜杠字符``。否则,该命令将提示用户有关目标是目录还是文件(如果目标不存在)的信息。
Lii

17

我尝试使用类似:

xcopy file.txt c:\example\new\path\to\copy\of\file\file.txt

但是它会问我是文件还是目录。由于我在具有40000个文件的批处理文件中拥有该文件,因此这是不切实际的。该解决方案仅部分解决了我的问题:它创建了目录结构,但需要用户交互。我在这里找到了解决问题的方法:

https://stackoverflow.com/questions/4283312/batch-file-asks-for-file-or-folder

基本上是在目标文件的末尾添加“ *”:

xcopy file.txt c:\example\new\path\to\copy\of\file\file.txt*

编辑:如@romkyns所指出的,如果您具有相同名称的文件加上其他名称(例如“ file.txt.bak”),则可能会产生不希望的结果。在上面发布的同一线程中,另一个可行的解决方案是将“ echo f”传递给您的命令:

echo f | xcopy file.txt c:\example\new\path\to\copy\of\file\file.txt

如果您使用其他语言使用系统文件中的任何字母,则应在其中替换“ f”。


1
file.txt.bak当然,只有目录中没有该选项时才有效。不过,这在某些情况下可能会起作用。
RomanSt

@romkyns是。发布此消息几个月后,我遇到了同样的问题,并做了“ echo f”解决方案,它也很好用。编辑我的答案...
msb

1
使用echo f | ,您不再需要尾随*
mcw0933 2014年

1
如果第二个文件名相同,则它是多余的。只要目录中的尾部斜杠存在,“ xcopy file.txt c:\ example \ new \ path \ to \ copy \ of \ file \”将起作用(否则,询问是否是文件或目录的意思) 。
FourtyTwo 2013年


0

是否使用copyxCopy,为了避免出现错误copy或提示xCopy,请测试所需文件夹的存在并在必要时创建它:

if not exist "NewPath" MkDir "NewPath"
copy "[path\]file.ext" "NewPath[\NewFileName.ext]"

&&在一个命令行上结合使用以下命令:

if not exist "NewPath" MkDir "NewPath" && copy "[path\]file.ext" "NewPath[\NewFileName.ext]"

可以使用move代替来完成相同的操作copy。我从有关如何使用的StackOverflow答案中了解了此技术move

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.