powershell - 如何使用 PowerShell 替换文件中出现的每个字符串?

标签 powershell

这个问题与之前的问题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/

相关文章:

Powershell即使将openssl添加到系统路径中也无法识别openssl

c++ - 如何在 Windows 命令行中读取输入 .in 文件

powershell - 如何使用 PowerShell 清点计划任务

bash - Git 哈希对象在 Powershell、CMD 和 Bash 中产生不同的 SHA1?

Powershell脚本-如何捕获被调用的子进程退出代码

powershell - 在powershell中将日期转换为unix时间戳

visual-studio-2010 - Visual Studio 2012 PowerShell 项目

c# - 无法注册 C# Powershell 管理单元

windows - 当 PowerShell 脚本更新时,Doxygen 不读取 Doxyfile

sql-server - powershell 从表中提取值