找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 32767|回复: 10

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

[复制链接]
发表于 2013-5-30 12:49:05 | 显示全部楼层 |阅读模式
请教如何通过Bat程序搜索U盘上的所有Word文档,将所有含“初级焊工”、“水平测试”等文本的Word文档自动复制到D盘的名为“筛选”的文件夹中?
这里所有的U盘盘符是动态,比如说在一台电脑上U盘是G盘,在别一台电脑上U盘可能是H盘
发表于 2013-5-31 11:22:31 | 显示全部楼层
http://www.bathome.net/thread-24641-1-1.html
我已经告诉你如何获取盘符、如何获取文件了,要不你先自己尝试写一下?
能否成功没关系,把你尝试写的代码贴出来看看,我帮你改。
发表于 2013-5-31 14:18:17 | 显示全部楼层
纯批的处理的话   主要难点在 Word文档里 搜索中文关键词
发表于 2013-5-31 18:37:54 | 显示全部楼层
3楼说的是。
但是如果是从文件名字来识别的就好做了。
 楼主| 发表于 2013-6-1 07:26:08 | 显示全部楼层
本帖最后由 tangqingfu 于 2013-6-1 07:28 编辑

回复 3# terse

最好是能搜索中文和英文的,能否请terse兄帮忙编写?
发表于 2013-6-1 15:04:14 | 显示全部楼层
本帖最后由 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技术 +1 收起 理由
tangqingfu + 1 感谢分享

查看全部评分

 楼主| 发表于 2013-6-3 07:59:22 | 显示全部楼层
回复 6# apang
谢谢,感觉速度偏慢了点。
不知还有没有更高效的办法?
发表于 2013-6-4 17:30:31 | 显示全部楼层
回复 7# tangqingfu


    搜文件内容本来就是强人所难,word的格式不是纯文本,还需要另行转换,别指望会快
 楼主| 发表于 2013-6-4 18:28:36 | 显示全部楼层
谢谢CrLf兄的提醒,只好作罢了
发表于 2013-6-5 09:03:12 | 显示全部楼层
现在的求代码者还真是牛XX
没人收你钱,不用拉倒,权当练习
 楼主| 发表于 2013-6-5 09:59:34 | 显示全部楼层
现在的求代码者还真是牛XX
没人收你钱,不用拉倒,权当练习
apang 发表于 2013-6-5 09:03


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

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 10:39 , Processed in 0.020689 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表