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

回复 15# wyx567
总算让我找到这篇文章:
  1. VBA打开文件时(临时)禁用宏
  2. http://club.excelhome.net/thread-1001802-1-1.html
复制代码
于是,可以消灭那个对话框了。
  1. CommandMode "VBS 批量转多文件夹内DOC为TXT,再合并TXT  By  Yu2n@qq.com"
  2. Main
  3. Sub Main()
  4.   On Error Resume Next
  5.   ' 选择文件夹
  6.   Dim strFolder, arrPath, strPath, nFileCount, i
  7.   WScript.Echo "请选择 Word 文件路径:"
  8.   strFolder = BrowseForFolder("请选择 Word 文件路径:")
  9.   If strFolder = "" Then Exit Sub
  10.   arrPath = ScanFolder(strFolder)
  11.   ' 统计个数,用于显示进度
  12.   For Each strPath In arrPath
  13.     If LCase(Right(strPath,4))=".doc" Or LCase(Right(strPath,5))=".docx" Then
  14.       nFileCount = nFileCount + 1
  15.     End If
  16.   Next
  17.   ' 执行转换
  18.   Set objWord = Word_Init()
  19.   For Each strPath In arrPath
  20.     If LCase(Right(strPath,4))=".doc" Or LCase(Right(strPath,5))=".docx" Then
  21.       i = i + 1
  22.       ' 显示进度
  23.       WScript.Echo "[" & i & "/" & nFileCount & "]" & strPath
  24.       ' 执行转换
  25.       Doc2Txt objWord, strPath
  26.       ' 追加TXT
  27.       CreatTxtFile strFolder, strPath
  28.     End If
  29.   Next
  30.   ' 退出
  31.   objWord.Quit
  32.   Msgbox "完成!"
  33. End Sub
  34. ' 打开DOC,另存为
  35. Function Doc2Txt(objWord, FilePath)
  36.   On Error Resume Next
  37.   Set fso = CreateObject("Scripting.Filesystemobject")
  38.   If Not fso.FileExists(FilePath) Then Exit Function
  39.   Set objDoc = objWord.Documents.Open(FilePath)
  40.   ' 方法一、另存为,wyx567反映个别Docx出错
  41.   ' Const wdFormatText = 2
  42.   ' Const Encoding = 1200
  43.   ' Const wdCRLF = 0
  44.   ' objWord.ActiveDocument.SaveAs FilePath & ".txt", wdFormatText, False, "", False, _
  45.   '      "", False, False, False, False, False, Encoding, False, False, wdCRLF
  46.   ' 方法二、直接获取Doc文本内容
  47.   strContent = objDoc.Content
  48.   objDoc.Close False
  49.   ' 保存Doc文本内容到txt文件
  50.   Set wTxt = fso.OpenTextFile(FilePath & ".txt", 2, True, -1)
  51.   wTxt.Write FormatText(strContent)
  52.   wTxt.Close
  53.   If Not Err.Number = 0 Then Doc2Txt = True
  54. End Function
  55. ' 创建 Word 对象
  56. Function Word_Init()
  57.   Const msoAutomationSecurityForceDisable = 3
  58.   Set objWord = CreateObject("Word.Application")
  59.   If Not Err.Number = 0 Then
  60.     Msgbox "错误:无法创建 Word 对象,你可能没有安装 Office 。"
  61.     WScript.Quit(999)
  62.   End If
  63.   If Not objWord.Application.Version >= 12.0 Then
  64.     Msgbox "警告:请使用 Office 2007 以上版本。"
  65.   End If
  66.   ' 隐藏运行,屏蔽提示
  67.   objWord.Visible = False
  68.   objWord.DisplayAlerts = False
  69.   ' 禁用以编程方式打开的所有文件中的所有宏,而不显示任何安全警告。
  70.   ' VBA打开文件时(临时)禁用宏
  71.   ' http://club.excelhome.net/thread-1001802-1-1.html
  72.   objWord.AutomationSecurity = msoAutomationSecurityForceDisable
  73.   Set Word_Init = objWord
  74. End Function
  75. '将转换后的TXT追加到指定文件
  76. Function CreatTxtFile(ByVal strFolderPath, ByVal strFilePath)
  77.   Set fso = CreateObject("Scripting.FileSystemObject")
  78.   If Not fso.FileExists(strFilePath & ".txt") Then Exit Function
  79.     ' 整理路径
  80.     strSubFolderName = Mid(strFilePath, Len(strFolderPath) + 2)
  81.     If InStr(strSubFolderName, "\") > 0 Then
  82.     strSubFolderName = Left(strSubFolderName, InStr(strSubFolderName, "\") - 1)
  83.     strTxtFile = strFolderPath & "\" & strSubFolderName & "\" & strSubFolderName & ".txt"
  84.   Else
  85.     strTxtFile = strFolderPath & "\" & strSubFolderName & ".txt"
  86.   End If
  87.   ' 打开转换后的TXT文件
  88.   Set rTxt = fso.OpenTextFile(strFilePath & ".txt", 1, False, -1)
  89.   strText = rTxt.ReadAll()
  90.   rTxt.Close
  91.   ' 删除转换后的文件
  92.   fso.DeleteFile strFilePath & ".txt", True
  93.   ' 将转换后的TXT追加到指定文件
  94.   Set wTxt = fso.OpenTextFile(strTxtFile, 8, True, -1)
  95.   wTxt.Write strText
  96.   wTxt.Close
  97. End Function
  98. ' 以命令提示符环境运行(保留参数)
  99. Sub CommandMode(ByVal sTitle)
  100.   If (LCase(Right(WScript.FullName,11)) = "wscript.exe") Then
  101.     Dim i, sArgs
  102.     For i = 1 To WScript.Arguments.Count
  103.       sArgs = sArgs & " " & """" & WScript.Arguments(i-1) & """"
  104.     Next
  105.     CreateObject("WScript.Shell").Run( _
  106.       "cmd /c Title " & sTitle & " &Cscript.exe //NoLogo  """ & _
  107.       WScript.ScriptFullName & """ " & sArgs & " &pause"),3
  108.       Wscript.Quit
  109.   End If
  110. End Sub
  111. ' 格式化字符串
  112. Function FormatText(ByVal str)
  113.   ' 删除空行
  114.   str = Replace(str, vbLf, "")
  115.   str = Replace(str, vbCr, vbCrLf)
  116.   str = regEx_replace("^\s*\r\n", str, "")
  117.   ' 取前300行
  118.   arrStr = Split(str, vbCrLf)
  119.   If UBound(arrStr)>(300-1) Then ReDim Preserve arrStr(300-1)
  120.   str = Join(arrStr, vbCrLf)
  121.   FormatText = str
  122. End Function
  123. ' 正则表达式替换
  124. Function regEx_replace(ByVal sPattern, ByVal str, ByVal sReplace)
  125.   Dim regEx                      ' 建立变量。
  126.   Set regEx = CreateObject("VBScript.RegExp")  ' 建立正则表达式。
  127.   regEx.Pattern = sPattern   ' 设置模式。
  128.   regEx.IgnoreCase = True    ' 设置是否区分字符大小写。
  129.   regEx.Global = True        ' 设置全局可用性。
  130.   regEx.MultiLine = True     ' 多行匹配模式
  131.   regEx_replace = regEx.Replace(str, sReplace)   ' 作替换。
  132.   Set regEx = Nothing
  133. End Function
  134. ' 浏览文件夹
  135. Function BrowseForFolder(ByVal strTips)
  136.   Dim objFolder
  137.   Set objFolder = CreateObject("Shell.Application").BrowseForFolder (&H0, strTips, &H0010 + &H0001)
  138.   If (Not objFolder Is Nothing) Then BrowseForFolder = objFolder.Self.Path  'objFolder.Items().Item().Path
  139. End Function
  140. ' 获取文件夹所有文件夹、文件列表(数组)
  141. Function ScanFolder(ByVal strPath)
  142.   Dim arr()
  143.   ReDim Preserve arr(0)
  144.   Call SCAN_FOLDER(arr, strPath)
  145.   ReDim Preserve arr(UBound(arr) - 1)
  146.   ScanFolder = arr
  147. End Function
  148. Function SCAN_FOLDER(ByRef arr, ByVal folderSpec)
  149.   On Error Resume Next
  150.   Dim fso, objItems, objFile, objFolder
  151.   Set fso = CreateObject("Scripting.FileSystemObject")
  152.   Set objItems = fso.GetFolder(folderSpec)
  153.   If Right(folderSpec, 1) <> "\" Then folderSpec = folderSpec & "\"
  154.   If (Not fso.FolderExists(folderSpec)) Then Exit Function
  155.   For Each objFile In objItems.Files
  156.     arr(UBound(arr)) = objFile.Path
  157.     ReDim Preserve arr(UBound(arr) + 1)
  158.   Next
  159.   For Each objFolder In objItems.subfolders
  160.     Call SCAN_FOLDER(arr, objFolder.Path)
  161.   Next
  162.   arr(UBound(arr)) = folderSpec
  163.   ReDim Preserve arr(UBound(arr) + 1)
  164. End Function
复制代码
『千江有水千江月』千江有水,月映千江;万里无云,万里青天。    http://yu2n.qiniudn.com/

TOP

回复 16# yu2n


    运行流畅,速度极快!

TOP

返回列表