使用Powershell替换文本文件中的字符串串
正在处理PowerShell代码,该代码将替换文件夹中文本文件(包含大量文本文件)中的一组字符。是否有一种方法可以对文件夹中的所有文件执行此操作 问题是,当我运行代码(new_NOV_1995.txt)时,它会创建一个新文件,但不会更改新文件中的任何字符使用Powershell替换文本文件中的字符串串,powershell,windows-7,powershell-3.0,Powershell,Windows 7,Powershell 3.0,正在处理PowerShell代码,该代码将替换文件夹中文本文件(包含大量文本文件)中的一组字符。是否有一种方法可以对文件夹中的所有文件执行此操作 问题是,当我运行代码(new_NOV_1995.txt)时,它会创建一个新文件,但不会更改新文件中的任何字符 $lookupTable = @{ '¿' = '|' 'Ù' = '|' 'À' = '|' 'Ú' = '|' '³' = '|' 'Ä' = '-' } $original_file = 'C:\FilePath\NOV_1
$lookupTable = @{
'¿' = '|'
'Ù' = '|'
'À' = '|'
'Ú' = '|'
'³' = '|'
'Ä' = '-'
}
$original_file = 'C:\FilePath\NOV_1995.txt'
$destination_file = 'C:\FilePath\NOV_1995_NEW.txt'
Get-Content -Path $original_file | ForEach-Object {
$line = $_
$lookupTable.GetEnumerator() | ForEach-Object {
if ($line -match $_.Key)
{
$line = $line -replace $_.Key, $_.Value
}
}
$line
} | Set-Content -Path $destination_file
虽然这样做可行,但性能可能是个问题。我唯一的测试是在一个包含
$lookupTable
的小文件上进行的
$lookupTable = @{
'¿' = '|'
'Ù' = '|'
'À' = '|'
'Ú' = '|'
'³' = '|'
'Ä' = '-'
}
$original_file = 'C:\FilePath\NOV_1995.txt'
$destination_file = 'C:\FilePath\NOV_1995_NEW.txt'
$originalContent = Get-Content -Path $original_file
$lookupTable.GetEnumerator() | % {
$originalContent = $originalContent -replace $_.Key,$_.Value
}
$originalContent | Out-File -FilePath $destination_file
你的代码实际上对我有用。您的文件仍然可能存在编码问题。当您使用
Get Content$path
将文件读入控制台时,文件看起来是否正确?如果文件看起来不正确,您可能需要使用
设置内容
和获取内容
cmdlet
改进您当前的逻辑 我将您的
$lookuptable
更改为一对PSObject。由于您对大多数部分进行相同的替换,我将它们合并到一个正则表达式中
下一部分我支支吾吾,但因为在我提议的改变之后,你只做了两次替换,我想你可以把这两个链接成一条替换线。否则你可以在那里有一个foreach对象,但我认为这更简单更快
这样我们就不需要测试比赛了<代码>-替换正在为我们进行测试
$toPipe = [pscustomobject]@{
Pattern = '¿|Ù|À|Ú|³'
Replacement = "|"
}
$toHypen = [pscustomobject]@{
Pattern = 'Ä'
Replacement = "-"
}
$path = "c:\temp\test\test"
Get-ChildItem -Path $path | ForEach-Object{
(Get-Content $_.FullName) -replace $toPipe.Pattern,$toPipe.Replacement -replace $toHypen.Pattern,$toHypen.Replacement |
Set-Content $_.FullName
}
请注意,这将更改原始文件。鼓励进行测试
>代码>设置内容>代码>获取内容在性能方面不是最好的,因此您可能需要考虑使用<代码> [IO.file ]::RealLeLoad($file)< /C>及其伙伴静态方法>代码> [IO .file ]::RealeAlLeLayes($file)< /Calp> < /P>所提到的特殊字符的可能副本('',',',',',',',''”)在一个文本文件中多次出现。除此之外,我想改进您的替换逻辑。你的文件也很大吗?我以为有编码问题,但测试表明我可能弄错了。它对你有用吗?……对我来说,它没有改变特殊字符。只需复制和粘贴相同的旧文件。