如何使用Windows批处理复制文件?

5
我有一个包含多个子目录和文件的目录。 如何将所有子目录中的文件复制到新位置? 编辑:我不想复制目录,只是文件... 由于这仍在XP上,我选择了以下解决方案:
 for /D %S IN ("src\*.*") DO  @COPY "%S\" "dest\"

谢谢!

6个回答

6

好的。根据您的编辑,您不想要目录结构,我认为您需要使用类似于以下内容的东西:

for /F "usebackq" %s IN (`DIR /B /S /A-D SrcDir`) DO @(
    XCOPY %s DestDir\%~nxs
)

啊,这让我想念bash了! 查找SrcDir目录下的所有文件并将它们复制到DestDir目录中。 - h4unt3r

3
复制命令 Xcopy 可能会有所帮助。
XCOPY /E SrcDir\*.* DestDir\

如果您不想要SrcDir中的任何文件,只想要子目录,您可以使用XCOPY与FOR命令结合使用:

FOR /D %s IN (SrcDir\*) DO @XCOPY /E %s DestDir\%~ns\

2

robocopy "c:\source" "c:\destination" /E


RoboCopy是一款非常出色且非常强大的实用工具。如果这是关键任务,那么RoboCopy很可能是您的主要选择。 - Eric Tuttleman
另外,在Vista上,xcopy已经被robocopy所取代。 - Mark Cidade
哈哈哈,我并不太担心xcopy很快就会被取代。不过,你说得有道理。 - Eric Tuttleman

1

如果我理解正确,您有一个大的目录树,希望将其中所有文件放在一个目录中。如果是这样,那么我可以用两行代码实现:

dir /s /b "yourSourceDirectoryTreeHere" > filelist.txt
for /f %f in (filelist.txt) do @copy %f "yourDestinationDirHere"

在批处理文件中与命令行不同,将 %f 更改为 %%f。

我喜欢你的解决方案,但是我的解决方案只需要一行代码,而且不需要使用临时文件。谢谢! - Nescio
你的程序能够遍历整个树吗?我原本以为它不能,但我想我得试一下。 - Mark Allen
Eric的回答似乎是我的两行命令的一行版本,没有临时文件。 - Mark Allen
你说得对,马克,看起来我确实借鉴了你的想法。不过我添加了 /A-D 参数到 DIR 命令中,以便它不列出目录。除此之外,这还是你的答案。 - Eric Tuttleman

0

如果你想在另一端保持相同的文件夹结构,使用XCOPY听起来很简单。

xcopy c:\old\*.* d:\new\ /s

如果你想要复制空目录,可以使用/e而不是/s。


0
 for /D %S IN ("src\*.*") DO  @COPY "%S\" "dest\"

1
如果这对你来说很好的话,那太棒了。不过,它有一个问题,即如果你在src目录下有子目录,并且想要获取其中的文件,你的命令可能无法实现(至少根据我所知)。在进一步理解你的需求后,我添加了另一个答案。 - Eric Tuttleman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接