仅查找HTML文件&在PowerShell中替换它们内部的标记

时间:2014-02-11 20:05:46

标签: html powershell

我需要在PowerShell中编写一个脚本,它将搜索文件夹,只查找HTML文件,并用新标记替换我指定的某一行标记。

这是我到目前为止所做的:

$filePath = 'C:\Users\bettiom\Desktop\schools\alex\Academics'
$processFiles = Get-ChildItem -Exclude *.bak -Filter *.htm -Recurse -Path $filePath

$query = '<html>'
$replace = '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">'

foreach ( $file in  $processFiles ) {
     $file | Copy-Item -Destination "$file.bak"

    $arrayData = Get-Content $file
    for ($i=0; $i -lt $arrayData.Count; $i++) {
         if ( $arrayData[$i] -match $query ) {
              $arrayData[$i+1] = $arrayData[$i+1].Replace($query,$replace)
         } else { }
    }
    $arrayData | Out-File $file -Force
}

在foreach循环之前,所有东西似乎都会起作用,然后它才会执行该行。

非常感谢任何帮助。

先谢谢。

1 个答案:

答案 0 :(得分:1)

你正在使用你不应该使用的管道,并避免它们实际上有益的地方。试试这个:

$filePath = 'C:\Users\bettiom\Desktop\schools\alex\Academics'

$srch = '<html>'
$repl = '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">'

Get-ChildItem -Exclude *.bak -Filter *.htm -Recurse -Path $filePath | % {
  $file = $_.FullName
  Copy-Item $file "$file.bak"
  (Get-Content $file) -replace $srch, $repl | Out-File $file -Force
}