这个问题与之前的问题How can I replace every occurence of a String in a file with PowerShell?类似。 “除了我的挑战是将文本替换为多个文件。我尝试使用前面问题中的解决方案并使用类似于下面的命令。
(Get-Content .\*.txt).replace("old text", "new text") | Set-Content .\*.txt
它似乎有效,但每个文件的大小已大大增加到目录中的文件总数。尽管当我打开任何文件时它看起来都很正常。
任何人都有解决方法的想法。我的试金石是我应该恢复我的文本更改,并且文件大小根本不应该改变。
最佳答案
您必须一次处理一个文件:
Get-Item *.txt |
ForEach-Object {
$f = $_.FullName; (Get-Content $f).replace("old text", "new text") | Set-Content $f
}
请注意,如果文件完全为空(零字节),此操作将会失败。
此外,无论输入文件的编码是什么,输出文件都将根据系统的旧代码页(通常是单字节、扩展 ASCII 编码)采用 Default
编码)。
至于你尝试过的:
(Get-Content .*.txt)
将所有*.txt
文件中的行作为 发送通过管道的单个线路数组。Set-Content *.txt
然后将一个数组(已进行替换)作为一个整体发送到每个当前目录中的*.txt
文件。
关于powershell - 如何使用 PowerShell 替换文件中出现的每个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41900889/