Board logo

标题: [文本处理] 【已解决】批处理实现批量替换多个WORD文档内容 [打印本页]

作者: wangjnyz    时间: 2022-2-10 09:43     标题: 【已解决】批处理实现批量替换多个WORD文档内容

本帖最后由 wangjnyz 于 2022-2-10 16:57 编辑

事情已经完美解决,感谢诸位帮助。已向论坛支付宝二维码“李江超”发送红包,祝福大家万事如意,论坛一如既往的兴旺


文件夹内有10个文件夹:


文件夹1,内有WORD文档a,文档内容含有“1月1日”
文件夹2,内有WORD文档b,文档内容含有“1月1日”
文件夹3,内有WORD文档c,文档内容含有“1月1日”
文件夹4,内有WORD文档d,文档内容含有“1月1日”
文件夹5,内有WORD文档e,文档内容含有“1月1日”
文件夹6,内有WORD文档f,文档内容含有“1月1日”
文件夹7,内有WORD文档g,文档内容含有“1月1日”
文件夹8,内有WORD文档h,文档内容含有“1月1日”
文件夹9,内有WORD文档i,文档内容含有“1月1日”
文件夹10,内有WORD文档j,文档内容含有“1月1日”



请教论坛诸位高人,能否使用批处理实现如下效果:

“1月1日”自动改为电脑桌面右下角系统显示的日期,

比如“1月1日”改为“2月10日”




个人感觉,不打开WORD就修改内容似乎实现起来不太容易。
不知道上述的操作是否具有可行性。



另外,咱们论坛有没有赞助通道啊,虽人微言轻也受助不少,略尽绵薄之力。
作者: went    时间: 2022-2-10 14:56

test.bat 使用前先关闭word软件
  1. #&cls&@powershell -c "Get-Content '%~0' | Out-String | Invoke-Expression" & pause&exit
  2. $app = New-Object -ComObject 'Word.Application'
  3. $app.Visible = $false
  4. Get-ChildItem -Filter '*.doc*' -Recurse | foreach {
  5.     $doc = $app.Documents.Open($_.FullName)
  6.     $app.Selection.Find.Forward = $true
  7.     $app.Selection.Find.Text = '1月1日'
  8.     $app.Selection.Find.Replacement.Text = Get-Date -Format 'M月d日'
  9.     $app.Selection.Find.Execute($null,$null,$null,$null,$null,$null,$null,$null,$null,$null,2)
  10.     $doc.Save()
  11. }
  12. $app.Quit()
复制代码

作者: flashercs    时间: 2022-2-10 15:57

本帖最后由 flashercs 于 2022-2-10 16:05 编辑

wsf脚本.
链接:https://pan.baidu.com/s/13h6DQEaduumObMqLX6cECA
提取码:ehn2
  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <package xmlns="http://schemas.microsoft.com/WindowsScriptHost">
  3.     <job>
  4.         <script language="VBScript">
  5.             <![CDATA[
  6. On Error Resume Next
  7. Const conFind = "1月1日" '要替换的日期
  8. Const wdReplaceAll = 2
  9. Const conExtension = "|docx|doc|"
  10. Dim dtm,strDtm,wordApp,fso
  11. dtm = Now
  12. strDtm = Month(dtm) & "月" & Day(dtm) & "日"
  13. Set fso = CreateObject("Scripting.FileSystemObject")
  14. Set wordApp = CreateObject("Word.Application")
  15. wordApp.DisplayAlerts = False
  16. GenFolder fso.GetFolder(fso.GetParentFolderName(WScript.ScriptFullName))
  17. wordApp.Quit
  18. MsgBox "Done"
  19. Set wordApp = Nothing
  20. Set fso = Nothing
  21. Sub GenFolder(oFolder)
  22.   On Error Resume Next
  23.   Dim oFile,oSubFolder
  24.   For Each oFile In oFolder.Files
  25.     If InStr(1,conExtension,fso.GetExtensionName(oFile.Name),vbTextCompare) > 0 Then
  26.       GenFile oFile
  27.     End If
  28.   Next
  29.   For Each oSubFolder In oFolder.SubFolders
  30.     GenFolder oSubFolder
  31.   Next
  32. End Sub
  33. Sub GenFile(oFile)
  34.   On Error Resume Next
  35.   Dim doc
  36.   Set doc = wordApp.Documents.Open(oFile.Path)
  37.   ReplaceWords doc
  38.   doc.Save
  39. End Sub
  40. Sub ReplaceWords(document)
  41.   On Error Resume Next
  42.   With document.Content.Find
  43.     .ClearFormatting
  44.     .Text = conFind
  45.     With .Replacement
  46.         .ClearFormatting
  47.         .Text = strDtm
  48.     End With
  49.     .Execute , , , , , , , , , , wdReplaceAll
  50.   End With
  51. End Sub
  52. ]]>
  53.         </script>
  54.     </job>
  55. </package>
复制代码

作者: wangjnyz    时间: 2022-2-10 16:05

回复 2# went


    多谢兄台慷慨相助。可能这个问题涉及WORD确实难度较大,我试了一下,在完全关闭WORD的情况下,无论是放在含有“1月1日”的文档所在的文件夹,还是放在上一层文件夹内,都显示false并提示按任意键退出(放在上一层文件夹则每行显示多个false)。o(╯□╰)o
作者: wangjnyz    时间: 2022-2-10 16:08

回复 3# flashercs
多谢兄台,这个似乎不是BAT批处理吧,不太懂啊,是不是需要用其他软件来编译一下,是吧
作者: wangjnyz    时间: 2022-2-10 16:09

回复 3# flashercs

再次感谢,刚看到你又重新编辑了帖子,附上了连接,太感谢了。我来试试
作者: went    时间: 2022-2-10 16:09

回复 4# wangjnyz


    是ansi编码吗,显示false是文档中不包含指定文字
作者: wangjnyz    时间: 2022-2-10 16:13

回复 3# flashercs


   完美解决了问题,太感谢您了。印证江湖上有种传说:扶危与济困,深藏身与名。好人一生平安:handshake:handshake
作者: wangjnyz    时间: 2022-2-10 16:15

回复 7# went


   是ANSI编码,个人估计是WORD这个替换操作用批处理实现难度还是有点大,毕竟WORD也不是开源软件。
作者: 心若拂尘    时间: 2022-7-3 20:11

回复 3# flashercs


    求继续分项
作者: flashercs    时间: 2022-7-3 22:27

回复 10# 心若拂尘


    你保存代码就行,不用分享了.




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