batch file将具有特定扩展名的文件从多个目录复制到一个目录

我是一个新手,所以忍受我…

我正在尝试使用batch file将所有分布在一个主目录的多个子目录中的.doc文件复制到另一个目录中。 我已经设法从这些目录中得到我想要使用的所有文件(有数百个)的filelist.txt

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

我会用什么脚本将这些文件复制到一个目录中? 我可以使用一些实际从filelist.txt抓取这些文件名的代码,并且可以使用它们吗?

作为参考,我看了下面的问题,因为它看起来像是在做我想做的事情,但是这对我没有帮助。

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

另外,我真的很想理解这个概念,所以请分解代码,告诉我每个项目是做什么的,或者至less包括一个链接来解释它。

在batch file解决scheme中

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

代码就这样工作;

对于目录c:\source每个文件和匹配模式(\*.xml)子目录/R ,将文件名放在variables%%f ,然后对每个文件拷贝文件copy %%f到目标x:\\destination\\

只是在我的Windows XP电脑上进行了testing,它对我来说就像是一种享受。 但是我把它input命令提示符,所以我使用了单个的%fvariables名称版本,如上面链接的问题所述。

只需使用带有recursion选项的XCOPY命令即可

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

/ s将使其“recursion”

像这样的事情是为什么我切换到Powershell。 试试看,这很有趣:

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

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

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

希望这可以帮助。

我会添加一些检查后复制(使用'||'),但我不知道如何“复制/ V”遇到错误时作出反应。

你可能想试试这个:

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

作为复制行。 让我知道,如果你从中得到的东西(没有位置testing复制失败atm ..)

你也可以使用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