批处理文件将具有某些扩展名的文件从多个目录复制到一个目录

时间:2009-08-03 22:11:24

标签: windows batch-file command-prompt xcopy .doc

我是新手,所以忍受我......

我正在尝试使用批处理文件将分散在一个主目录的多个子目录中的所有.doc文件复制到另一个目录中。我设法从这些目录中获取filelist.txt所有文件(有数百个),我想用它们复制:

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

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

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

Using xcopy to copy files from several directories to one directory

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

5 个答案:

答案 0 :(得分:59)

在批处理文件解决方案中

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

代码就是这样的;

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

刚刚在我的Windows XP计算机上测试它,它对我来说就像一种享受。但是我在命令提示符下键入了它,所以我使用了单个x:\\destination\\变量名称版本,如上面链接的问题所述。

答案 1 :(得分:44)

只需使用带递归选项的XCOPY命令

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

/ s将使其“递归”

答案 2 :(得分:6)

这些都是我改用Powershell的原因。尝试一下,这很有趣:

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

答案 3 :(得分: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

作为副本。让我知道你是否从中得到了一些东西(无法测试副本失败的原因......)

答案 4 :(得分: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