Board logo

标题: VBS怎样根据word内容标题自动重命名word文件名? [打印本页]

作者: yhcbird    时间: 2011-1-26 17:15     标题: VBS怎样根据word内容标题自动重命名word文件名?

  1. set fso=createobject("scripting.filesystemobject")
  2. set folder=fso.getfolder(".")
  3. set files=folder.files
  4. for each file in files
  5.         if lcase(right(file,3))="doc"  then
  6.                 a=1
  7.                 Set objWord = CreateObject("Word.Application")
  8.                 Set objDoc = objWord.Documents.Open(cstr(file))
  9.                 wjm=objDoc.Paragraphs(1).Range
  10.                 objWord.Quit
  11.         if file.name <> replace(wjm,vbcr,"") & ".doc" then createobject("wscript.shell").run "cmd /c ren " & chr(34) & file.name  & chr(34) & " " & chr(34) & wjm & ".doc"  & chr(34),0
  12.         end if
  13. next
  14. if a=1 then
  15.         msgbox "操作成功!",4096,"提示"
  16. else
  17.         msgbox "对不起,没有在【" & folder & "】下找到WORD文件",4096,"提示"
  18. end if
复制代码
这是一段根据word内容标题自动为word重命名的代码。这段代码是从网上复制过来的
刚把这快代码发在批处理版块了。。这里想请各位帮忙看下这段代码怎么改进比较。可以减少错误发生率。。
因为在执行的时候会第几行错误。。。貌似假如文件内容标题在第二行,第一行是空行的,就不会自动搜索第2行的标题,望高手看个端倪。。

[ 本帖最后由 yhcbird 于 2011-1-26 17:21 编辑 ]
作者: broly    时间: 2011-1-26 22:21

Word.Application对象没用过

待我研究一番先
作者: broly    时间: 2011-1-27 01:27

刚开完盘车,然后看了下这题,写了代码如下:
  1. Dim fso,fc,f,strName
  2. Set fso = CreateObject("scripting.filesystemobject")
  3. Set fc=fso.GetFolder(".").Files
  4. For Each f In fc
  5.   If LCase(fso.GetExtensionName(f))="doc" Then
  6.     strName=GetFileName(f.Path)
  7.   End If
  8.   f.Name=strName & ".doc"
  9.   Exit For
  10. Next
  11. Set fso=Nothing
  12. Function GetFileName(FilePath)
  13.   Dim i,objWord,Doc
  14.   Set objWord=CreateObject("word.application")
  15.   Set Doc=objWord.Documents.Open(FilePath)
  16.   For i=1 To Doc.Paragraphs.Count
  17.     If Replace(Doc.Paragraphs(i).Range," ","")<>vbCr Then
  18.       GetFileName=Replace(Doc.Paragraphs(i).Range,vbCr,"")
  19.       Exit For
  20.     End If
  21.   Next
  22.   objWord.Quit
  23.   Set objWord=Nothing
  24. End Function
复制代码


这个代码有点还不是很到位的,就是,如果标题含有特殊字符 \ / * | 之类的,那必须要过滤。其实用replace语句可以解决的,这里我偷下懒就不写了,睡觉,晚安~
作者: yhcbird    时间: 2011-1-28 09:35

辛苦了。测试下。没有成功。。。
作者: broly    时间: 2011-1-28 11:36

哦?我测试是没有问题的。出错提示什么?




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