批处理文件 将多个目录中具有特定扩展名的文件复制到一个目录中

问题描述 投票:0回答:6

我是新手,所以请耐心等待...

我正在尝试使用批处理文件将分散在一个主目录的几个子目录中的所有

.doc
文件复制到另一个目录中。 我已经设法从我想要复制的这些目录中获得了所有文件(有数百个)的
filelist.txt

"C:\Main directory\sub directory"
dir /b /s *.doc > "C:\Main directory\sub directory\filelist.txt"

我将使用什么脚本将它们复制到一个目录中? 我可以使用一些代码来实际从

filelist.txt
获取这些文件名并复制它们吗?

作为参考,我查看了下面的问题,因为它看起来像是在做我想做的事情,但它对我不起作用。

使用xcopy将多个目录中的文件复制到一个目录

另外,我真的很想理解这个概念,所以请为我分解代码,告诉我每个项目的作用,或者至少包含一个解释它的链接。

windows batch-file command-prompt xcopy .doc
6个回答
72
投票

在批处理文件解决方案中

for /R c:\source %%f in (*.xml) do copy %%f x:\destination\

代码是这样工作的;

对于目录

for
和子目录
c:\source
中与模式
/R
匹配的每个文件
(\*.xml)
,将文件名放入变量
%%f
中,然后对于每个文件
do
将文件
copy %%f
复制到目标
x:\\destination\\

刚刚在我的 Windows XP 计算机上测试了它,它对我来说就像一种享受。但我将其输入到命令提示符中,因此我使用了单个

%f
变量名称版本,如上面链接的问题中所述。


63
投票

只需使用带有递归选项的

XCOPY
命令

xcopy c:\*.doc k:\mybackup /sy

/s
将使其“递归”。


6
投票

诸如此类的事情就是我改用 Powershell 的原因。尝试一下,很有趣:

Get-ChildItem -Recurse -Include *.doc | % {
    Copy-Item $_.FullName -destination x:\destination
}

4
投票

布兰登,简短而甜美。也很灵活。

set dSource=C:\Main directory\sub directory
set dTarget=D:\Documents
set fType=*.doc
for /f "delims=" %%f in ('dir /a-d /b /s "%dSource%\%fType%"') do (
    copy /V "%%f" "%dTarget%\" 2>nul
)

希望这有帮助。

我会在复制后添加一些检查(使用“||”),但我不确定“copy /v”在遇到错误时如何反应。

你可能想尝试这个:

copy /V "%%f" "%dTarget%\" 2>nul|| echo En error occured copying "%%F".&& exit /b 1

作为复制线。如果您从中得到了一些东西,请告诉我(无法测试复制失败 atm..)


1
投票

您也可以使用vbscript

Set objFS = CreateObject("Scripting.FileSystemObject")
strFolder = "c:\test"
strDestination = "c:\tmp\"
Set objFolder = objFS.GetFolder(strFolder)

Go(objFolder)

Sub Go(objDIR)
  If objDIR <> "\System Volume Information" Then
    For Each eFolder in objDIR.SubFolders       
        Go eFolder
    Next
    For Each strFile In objDIR.Files
        strFileName = strFile.Name
        strExtension = objFS.GetExtensionName(strFile)
        If strExtension = "doc" Then
            objFS.CopyFile strFile , strDestination & strFileName
        End If 
    Next    
  End If  
End Sub 

另存为 mycopy.vbs 并在命令行上

c:\test> cscript /nologo mycopy.vbs

0
投票

这可以使用以下命令来完成:

for /r "C:\source" %f in (*.doc) do @copy "%f" "C:\destination"

您也可以运行这些以使其变得简单

set source="C:\src"
set destination="C:\dest"
set extension=doc

for /r %source% %f in (*.%extension%) do @copy "%f" %destination%

如果您愿意使用文件类型父文件夹名称进行复制,请尝试使用此命令

xcopy "C:\src\*.doc" "C:\dest" /sy
© www.soinside.com 2019 - 2024. All rights reserved.