如何替换文件夹中Word文档中所有出现的字符串

Stefan0309

我设法找到并编辑每个单词文件。使用此代码:

$objWord = New-Object -comobject Word.Application  
$objWord.Visible = $false

$objDoc = $objWord.Documents.Open("C:\users\stefan\test\New Microsoft Word Document.docx") 
$objSelection = $objWord.Selection 

$FindText = "that" 
$MatchCase = $False 
$MatchWholeWord = $true
$MatchWildcards = $False 
$MatchSoundsLike = $False 
$MatchAllWordForms = $False 
$Forward = $True 
$Wrap = $wdFindContinue 
$Format = $False 
$wdReplaceNone = 0 
$ReplaceWith = "this" 
$wdFindContinue = 1 

$a = $objSelection.Find.Execute($FindText,$MatchCase,$MatchWholeWord, ` 
$MatchWildcards,$MatchSoundsLike,$MatchAllWordForms,$Forward,` 
$Wrap,$Format,$ReplaceWith) 
$objDoc.Save()
$objWord.Quit()

但我想对整个文件夹都这样做。我试图插入这样的东西:

$objWord = New-Object -comobject Word.Application  
$objWord.Visible = $false

 $list = Get-ChildItem "c:\users\stefan\test\*.*" -Include *.doc*
 foreach($item in $list){
 $objDoc = $objWord.Documents.Open($list.FullName,$true)

 $objSelection = $objWord.Selection 

$FindText = "Sara" 
$MatchCase = $False 
$MatchWholeWord = $true
$MatchWildcards = $False 
$MatchSoundsLike = $False 
$MatchAllWordForms = $False 
$Forward = $True 
$Wrap = $wdFindContinue 
$Format = $False 
$wdReplaceNone = 0 
$ReplaceWith = "AJMOO" 
$wdFindContinue = 1 

$a = $objSelection.Find.Execute($FindText,$MatchCase,$MatchWholeWord, ` 
$MatchWildcards,$MatchSoundsLike,$MatchAllWordForms,$Forward,` 
$Wrap,$Format,$ReplaceWith) 
$objDoc.Save()
$objWord.Quit()
}

另外,它仅更改找到的一项,但我希望文件中包含所有项。谢谢。

马特

多次更换

另外,它仅更改找到的一项,但是我希望文件中的所有项

这是因为您尚未将替换范围设置为所有项。来自未在Execute方法调用中指定的下一个参数设置一个名为的变量$wdReplaceAll并将其设置为2然后,您调整调用以添加该变量。

$a = $objSelection.Find.Execute($FindText,$MatchCase,$MatchWholeWord, ` 
$MatchWildcards,$MatchSoundsLike,$MatchAllWordForms,$Forward,` 
$Wrap,$Format,$ReplaceWith,$wdReplaceAll) 

修复了针对一个文件运行时的问题。

多个文件

但我想为整个文件夹做

这样做的部分问题是您没有正确查询文件夹中的文件。-Include是挑剔的,与人合作-Recurse时可以工作,但是无论如何您都将其-Filter视作,因此请进行调整。

$list = Get-ChildItem "c:\users\stefan\test\" -filter "*.doc*"

接下来,在循环时,调用时将不使用当前迭代,而是使用整个集合 .open()

$objDoc = $objWord.Documents.Open($list.FullName,$true)

应该是

$objDoc = $objWord.Documents.Open($item.FullName,$true)

根据您的循环定义。

现在,您需要确保退出应用程序之前关闭每个文档现在,您正在循环中退出。

foreach($item in $list){
    #.... Stuff and things happens here.
    $objDoc.Save()
    $objDoc.Close()
}

$objWord.Quit()

变量声明和调用

现在,您将其设置$wrap为变量的值$wdFindContinue首次调用时$wdFindContinue为null,因为在代码后面没有将其设置为几行。

$Wrap = $wdFindContinue 
#...
$wdFindContinue = 1 

切换这些行的顺序或$wrap直接将其设置为1。我不确定这是不正确的含义。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

替换文件夹中所有文件中的字符串

用powershell替换文件夹中所有文件中的字符串

Powershell替换文件夹中所有文件中的字符串

Bash脚本替换文件中所有出现的字符串,包括文件名

Sed - 替换文件倒数第二行中所有出现的字符串

如何获得否。与文件夹中所有文件中的字符串匹配的行数

ExcelVBA-替换指定文件夹中所有文件名中的字符串

Bash文件夹中所有文件名中都出现字符串

计算一个文件夹中所有文件中所有出现的字符串

如何替换字符串中所有出现的字符?

如何替换JavaScript中所有出现的字符串?

如何替换 SQL 中所有出现的字符串

如何在所有文件夹和文件名中替换字符串

如何用不同的结果替换文本中所有相同的宪章/字符串?

如何替换文件中以某个前缀开头的所有字符串

如何使用Groovy读取文件夹中的所有文件并替换文件中的模式

替换C中字符串中所有出现的子字符串

如何重命名文件夹中所有不以特定前缀字符串开头的文件?

替换文件夹中所有.sh文件的第一行

Java-替换字符串中所有出现的“ $ {”

替换JavaScript中所有出现的字符串

替换数据框中所有出现的字符串

查找并替换范围中所有出现的字符串

Python,替换字符串中所有出现的模式

在文件夹及其所有子文件夹的所有文件中搜索并替换另一个子字符串

替换文件中的所有字符串,在替换中使用通配符

使用VBA在文件夹中的所有文档中查找和替换MS Word文本

如何替换bash中所有字符串中的特定子字符串?

如何仅在名称包含某些字符串的某些文件夹下替换文件中的字符串