我是新手,所以忍受我......
我正在尝试使用批处理文件将分散在一个主目录的多个子目录中的所有.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
另外,我真的很想理解这个概念,所以请为我分解代码,告诉我每个项目的作用,或者至少包含一个可以解释它的链接。
答案 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