标题: [文本处理] 【已解决】批处理实现批量替换多个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软件- #&cls&@powershell -c "Get-Content '%~0' | Out-String | Invoke-Expression" & pause&exit
- $app = New-Object -ComObject 'Word.Application'
- $app.Visible = $false
- Get-ChildItem -Filter '*.doc*' -Recurse | foreach {
- $doc = $app.Documents.Open($_.FullName)
- $app.Selection.Find.Forward = $true
- $app.Selection.Find.Text = '1月1日'
- $app.Selection.Find.Replacement.Text = Get-Date -Format 'M月d日'
- $app.Selection.Find.Execute($null,$null,$null,$null,$null,$null,$null,$null,$null,$null,2)
- $doc.Save()
- }
- $app.Quit()
复制代码
作者: flashercs 时间: 2022-2-10 15:57
本帖最后由 flashercs 于 2022-2-10 16:05 编辑
wsf脚本.
链接:https://pan.baidu.com/s/13h6DQEaduumObMqLX6cECA
提取码:ehn2- <?xml version="1.0" encoding="utf-8" ?>
- <package xmlns="http://schemas.microsoft.com/WindowsScriptHost">
- <job>
- <script language="VBScript">
- <![CDATA[
- On Error Resume Next
- Const conFind = "1月1日" '要替换的日期
- Const wdReplaceAll = 2
- Const conExtension = "|docx|doc|"
-
- Dim dtm,strDtm,wordApp,fso
- dtm = Now
- strDtm = Month(dtm) & "月" & Day(dtm) & "日"
- Set fso = CreateObject("Scripting.FileSystemObject")
- Set wordApp = CreateObject("Word.Application")
- wordApp.DisplayAlerts = False
- GenFolder fso.GetFolder(fso.GetParentFolderName(WScript.ScriptFullName))
- wordApp.Quit
- MsgBox "Done"
- Set wordApp = Nothing
- Set fso = Nothing
-
- Sub GenFolder(oFolder)
- On Error Resume Next
- Dim oFile,oSubFolder
- For Each oFile In oFolder.Files
- If InStr(1,conExtension,fso.GetExtensionName(oFile.Name),vbTextCompare) > 0 Then
- GenFile oFile
- End If
- Next
- For Each oSubFolder In oFolder.SubFolders
- GenFolder oSubFolder
- Next
- End Sub
- Sub GenFile(oFile)
- On Error Resume Next
- Dim doc
- Set doc = wordApp.Documents.Open(oFile.Path)
- ReplaceWords doc
- doc.Save
- End Sub
- Sub ReplaceWords(document)
- On Error Resume Next
- With document.Content.Find
- .ClearFormatting
- .Text = conFind
- With .Replacement
- .ClearFormatting
- .Text = strDtm
- End With
- .Execute , , , , , , , , , , wdReplaceAll
- End With
- End Sub
- ]]>
- </script>
- </job>
- </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://www.bathome.net/) |
Powered by Discuz! 7.2 |