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

[文本处理] 【已解决】批处理实现批量替换多个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就修改内容似乎实现起来不太容易。
不知道上述的操作是否具有可行性。



另外,咱们论坛有没有赞助通道啊,虽人微言轻也受助不少,略尽绵薄之力。

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()
复制代码
1

评分人数

TOP

本帖最后由 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>
复制代码
1

评分人数

    • wangjnyz: 扶危济困,乐于助人技术 + 1
微信:flashercs
QQ:49908356

TOP

回复 2# went


    多谢兄台慷慨相助。可能这个问题涉及WORD确实难度较大,我试了一下,在完全关闭WORD的情况下,无论是放在含有“1月1日”的文档所在的文件夹,还是放在上一层文件夹内,都显示false并提示按任意键退出(放在上一层文件夹则每行显示多个false)。o(╯□╰)o
我欲乘风归去,高处不胜寒

TOP

回复 3# flashercs
多谢兄台,这个似乎不是BAT批处理吧,不太懂啊,是不是需要用其他软件来编译一下,是吧
我欲乘风归去,高处不胜寒

TOP

回复 3# flashercs

再次感谢,刚看到你又重新编辑了帖子,附上了连接,太感谢了。我来试试
我欲乘风归去,高处不胜寒

TOP

回复 4# wangjnyz


    是ansi编码吗,显示false是文档中不包含指定文字

TOP

回复 3# flashercs


   完美解决了问题,太感谢您了。印证江湖上有种传说:扶危与济困,深藏身与名。好人一生平安:handshake:handshake
我欲乘风归去,高处不胜寒

TOP

回复 7# went


   是ANSI编码,个人估计是WORD这个替换操作用批处理实现难度还是有点大,毕竟WORD也不是开源软件。
我欲乘风归去,高处不胜寒

TOP

回复 3# flashercs


    求继续分项

TOP

回复 10# 心若拂尘


    你保存代码就行,不用分享了.
微信:flashercs
QQ:49908356

TOP

返回列表