[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

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

http://www.bathome.net/thread-24641-1-1.html
我已经告诉你如何获取盘符、如何获取文件了,要不你先自己尝试写一下?
能否成功没关系,把你尝试写的代码贴出来看看,我帮你改。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

纯批的处理的话   主要难点在 Word文档里 搜索中文关键词

TOP

3楼说的是。
但是如果是从文件名字来识别的就好做了。

TOP

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

回复 3# terse

最好是能搜索中文和英文的,能否请terse兄帮忙编写?

TOP

本帖最后由 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"
复制代码
修改一下
1

评分人数

TOP

回复 6# apang
谢谢,感觉速度偏慢了点。
不知还有没有更高效的办法?

TOP

回复 7# tangqingfu


    搜文件内容本来就是强人所难,word的格式不是纯文本,还需要另行转换,别指望会快

TOP

谢谢CrLf兄的提醒,只好作罢了

TOP

现在的求代码者还真是牛XX
没人收你钱,不用拉倒,权当练习

TOP

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


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

TOP

返回列表