Board logo

标题: [文件操作] 如何将U盘上含指定文本的Word文档自动复制到硬盘的指定文件夹中? [打印本页]

作者: tangqingfu    时间: 2013-5-30 12:49     标题: 如何将U盘上含指定文本的Word文档自动复制到硬盘的指定文件夹中?

请教如何通过Bat程序搜索U盘上的所有Word文档,将所有含“初级焊工”、“水平测试”等文本的Word文档自动复制到D盘的名为“筛选”的文件夹中?
这里所有的U盘盘符是动态,比如说在一台电脑上U盘是G盘,在别一台电脑上U盘可能是H盘
作者: Batcher    时间: 2013-5-31 11:22

http://www.bathome.net/thread-24641-1-1.html
我已经告诉你如何获取盘符、如何获取文件了,要不你先自己尝试写一下?
能否成功没关系,把你尝试写的代码贴出来看看,我帮你改。
作者: terse    时间: 2013-5-31 14:18

纯批的处理的话   主要难点在 Word文档里 搜索中文关键词
作者: wuhengsi    时间: 2013-5-31 18:37

3楼说的是。
但是如果是从文件名字来识别的就好做了。
作者: tangqingfu    时间: 2013-6-1 07:26

本帖最后由 tangqingfu 于 2013-6-1 07:28 编辑

回复 3# terse

最好是能搜索中文和英文的,能否请terse兄帮忙编写?
作者: apang    时间: 2013-6-1 15:04

本帖最后由 apang 于 2013-6-2 15:10 编辑

保存为test.vbs,需要安装有MicroSoft OFFICE软件
复制U盘上含 初级焊工 或者含 水平测试 的word文档到D:\筛选(如果是含 初级焊工 并且含 水平测试,将26行or改成and)
楼主没考虑文件重名的情况,如果有重名,则在文件名后依次加[1]、[2]等数字。试试看吧
  1. DstDir = "D:\筛选"
  2. Set fso = CreateObject("Scripting.FileSystemObject")
  3. If Not fso.FolderExists(DstDir) Then fso.CreateFolder(DstDir)
  4. Set objWord=CreateObject("Word.Application")
  5. Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" _
  6.     & ".\root\cimv2")
  7. For Each Drv in fso.Drives
  8.     If Drv.DriveType = 1 Then
  9.         Set colFiles = objWMI.ExecQuery("Select * from CIM_DataFile " _
  10.             & "where Drive = '"&Drv.Path&"' and Extension Like 'doc%'")
  11.         For Each File in colFiles
  12.             CopyDocFile File.Name
  13.         Next
  14.         Set colFiles = Nothing
  15.     End If
  16. Next
  17. Sub CopyDocFile(f)
  18.     n = 0
  19.     Set objDoc = objWord.Documents.Open(f)
  20.     str = objDoc.Range.Text
  21.     objDoc.Saved = False : objDoc.Close
  22.     Set objDoc = Nothing
  23.     If InStr(str,"初级焊工") or InStr(str,"水平测试") Then
  24.         Name = fso.GetBaseName(f) : NewName = Name
  25.         Ext = "." & fso.GetExtensionName(f)
  26.         While fso.FileExists(DstDir & "\" & NewName & Ext)
  27.             n = n + 1
  28.             NewName = Name & "[" & n & "]"
  29.         Wend
  30.         fso.GetFile(f).Copy DstDir & "\" & NewName & Ext
  31.     End If
  32. End Sub
  33. Set objWMI = Nothing : objWord.Quit : Set objWord = Nothing
  34. MsgBox "OK"
复制代码
修改一下
作者: tangqingfu    时间: 2013-6-3 07:59

回复 6# apang
谢谢,感觉速度偏慢了点。
不知还有没有更高效的办法?
作者: CrLf    时间: 2013-6-4 17:30

回复 7# tangqingfu


    搜文件内容本来就是强人所难,word的格式不是纯文本,还需要另行转换,别指望会快
作者: tangqingfu    时间: 2013-6-4 18:28

谢谢CrLf兄的提醒,只好作罢了
作者: apang    时间: 2013-6-5 09:03

现在的求代码者还真是牛XX
没人收你钱,不用拉倒,权当练习
作者: tangqingfu    时间: 2013-6-5 09:59

现在的求代码者还真是牛XX
没人收你钱,不用拉倒,权当练习
apang 发表于 2013-6-5 09:03


呵呵,apang兄误会了,原以为通过bat或vbs可以快速处理这类问题,后来才了解到处理Word这类文档没那么强大。代码已收藏学习,谢谢apang兄!




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2