我需要在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循环之前,所有东西似乎都会起作用,然后它才会执行该行。
非常感谢任何帮助。
先谢谢。
答案 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
}