【问题标题】:PowerShell - How to put the following script together + adjust Header and FooterPowerShell - 如何将以下脚本放在一起+调整页眉和页脚
【发布时间】:2018-11-28 08:10:48
【问题描述】:

这是我目前正在处理的 Word 文档脚本示例 该脚本更改所有文件中的一个单词,但****不会更改部分文件名和页眉和页脚

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

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

$objSelection = $objWord.Selection 
$wdFindContinue = 1
$FindText = "COMPUTER" 
$MatchCase = $False 
$MatchWholeWord = $true
$MatchWildcards = $False 
$MatchSoundsLike = $False 
$MatchAllWordForms = $False 
$Forward = $True 
$Wrap = $wdFindContinue 
$Format = $False 
$wdReplaceNone = 0 
$ReplaceWith = "DESKTOP" 
$wdFindContinue = 1 
$ReplaceAll = 2

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

以下是更改部分文件名的脚本:

PS C:\User> get-childitem | foreach { rename-item $_ $_.Name.Replace("file1", "computer") }

我怎样才能把所有东西放在一起? 谢谢

【问题讨论】:

  • 您的文字代码中没有任何内容可以满足您对页眉页脚的需求。更改文件名或文件名的一部分是一种常见的做法,在帮助文件以及整个网络和本网站上都有示例。 stackoverflow.com/questions/24887905/…,您的重命名命令是静态的,但您说您正在访问多个文件。您是说所有文件都包含单词 file1,并且您正在尝试将 files1 替换为单词 computer?这是因为所有文件的名称都相同,这不是一回事。
  • 我想知道是否有办法将所有这些结合起来。我明白代码不涉及页眉和页脚。想知道是否有人可以提供帮助
  • @postanote stackoverflow.com/questions/46041100/… 这就是我所说的,但我尝试添加此代码:get-childitem |foreach { rename-item $_ $_.Name.Replace("test" , "test1") } 更改文件名,但最终得到一个错误。
  • 查看我对重命名工作的回答。

标签: powershell scripting


【解决方案1】:

最后一个代码段超出了您在 word 中所做的工作。所以,当你说结合时,就像你已经在做的那样:

您并没有说/显示您从最后一个代码段中得到的错误。

当尝试重命名文件时,您必须使用完整的文件名,其中包括该文件的路径,就像您在分词中所做的那样。

Get-ChildItem -Path E:\Temp -Filter '*.txt' 

    Directory: E:\Temp

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       11/27/2018   3:51 PM              0 OriginalFileName.txt


Get-ChildItem -Path 'E:\Temp' -Filter '*.txt' | 
ForEach { Rename-Item -Path $_.FullName -NewName ($_.FullName.Replace('Original','New')) -WhatIf }


ForEach { Rename-Item -Path $_.FullName -NewName ($_.FullName.Replace('Original','New')) -WhatIf }
What if: Performing the operation "Rename File" on target "Item: E:\Temp\OriginalFileName.txt Destination: E:\Temp\NewFileName.txt".



Get-ChildItem -Path 'E:\Temp' -Filter '*.txt' | 
ForEach { Rename-Item -Path $_.FullName -NewName ($_.FullName.Replace('Original','New')) }



Get-ChildItem -Path E:\Temp -Filter '*.txt' 


    Directory: E:\Temp

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       11/27/2018   3:51 PM              0 NewFileName.txt


foreach($item in $list)
{
    $objDoc = $objWord.Documents.Open($item.FullName,$true)

    $objSelection = $objWord.Selection 
    $wdFindContinue = 1
    $FindText = "COMPUTER" 
    $MatchCase = $False 
    $MatchWholeWord = $true
    $MatchWildcards = $False 
    $MatchSoundsLike = $False 
    $MatchAllWordForms = $False 
    $Forward = $True 
    $Wrap = $wdFindContinue 
    $Format = $False 
    $wdReplaceNone = 0 
    $ReplaceWith = "DESKTOP" 
    $wdFindContinue = 1 
    $ReplaceAll = 2

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

    Rename-Item -Path $item.FullName -NewName ($item.FullName.Replace($item.BaseName,$FindText)) -WhatIf
}
$objWord.Quit()

只需删除 -WhatIf 即可让它真正运行。

【讨论】:

  • 谢谢。我稍后会尝试运行它
猜你喜欢
  • 1970-01-01
  • 2019-07-27
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-26
相关资源
最近更新 更多