我希望有人能抽出时间帮我创建一个批处理文件或类似文件,用于在多个文件中查找和替换文本。我尝试过许多“搜索和替换”实用程序,但找不到能满足我需求的程序。
要求如下:在多个文件中查找并用不同的文本替换每个文件中的相同文本。
例子:
File1.txt、file2.txt、file3.txt 都有一个文本字符串“请更改我”
将 file1.txt 中的文本字符串“change me please”替换为“file1changed” 保存为原始文件名 (file1.txt) 将 file2.txt 中的文本字符串“change me please”替换为“file2changed” 保存为原始文件名 (file2.txt) 将 file3.txt 中的文本字符串“change me please”替换为“file3changed” 保存为原始文件名 (file3.txt)
答案1
使用 PowerShell 命令:
Get-Content c:\file1.txt | ForEach-Object { $_ -replace "change me please", "file1 changed" } | Set-Content c:\changed1.txt
Get-Content c:\file2.txt | ForEach-Object { $_ -replace "change me please", "file2 changed" } | Set-Content c:\changed2.txt
给我留下了两个文件:
更改1.txt
更改2.txt
有谁能告诉我如何重命名这些文件并覆盖原始文件:
changed1.txt为file1.txt
changed2.txt 至 file2.txt
答案2
强力搜索可以按照你的要求做。
答案3
如果文件不太大,那么你可以使用
$filenames = @("file1.txt", "file2.txt", "file3.txt")
foreach ($file in $filenames)
{
$replacementStr = $file + ' changed'
(Get-Content $file) |
Foreach-object { $_ -replace 'change me please' , $replacementStr } |
Set-Content $file
}
请注意 (Get-Content $ file) 周围的括号,它表示文件被读入内存(因此要求文件很小),但这意味着当您将文件写回时,该文件不再被使用。
如果文件对于内存来说太大,您可以将其写入临时文件,然后使用类似
Cp $tempfilename $file
rm $tempfilename
将临时文件复制到原始文件上并删除临时文件。