如何更改多个 .txt 文件中的字符并保存/覆盖 Powershell 中的现有文件
Posted
技术标签:
【中文标题】如何更改多个 .txt 文件中的字符并保存/覆盖 Powershell 中的现有文件【英文标题】:How to change a character in multiple .txt-files and save/ overwrite the existing file in Powershell 【发布时间】:2020-07-23 09:00:04 【问题描述】:我真的是 Powershell 的新手(2 天),但我还不是很好。 :(
我的问题是: 如何更改多个 .txt 文件中的字符并在 Powershell 中保存/覆盖现有文件
我的目标是将多个 RAW 文件复制到一个新文件夹中,将文件名从 .tsv 更改为 .txt,并至少将这些文件中的一个字符从 % 更改为百分比。
到目前为止我得到了什么: 前两个步骤有效,但我对第三步(替换)失去了理智。
Copy-Item -Path "C:\Users\user\Desktop\RAW\*.tsv" -Destination "C:\Users\user\Desktop\TXT" -Recurse
Set-Location "C:\Users\User\Desktop\TXT"
Get-ChildItem *.tsv | Rename-Item -NewName $_.Name -replace '.tsv','.txt'
这对我来说很好,现在我无法更进一步...... 我可以替换一个特定文件中的“%”,并将其保存在一个新文件中,但这不适用于更改文件名的批处理。
$file = "A.txt"
Get-Content $file | Foreach $_ -replace "%", "percent" | Set-Content A_1.txt
如果 "$file = "A.txt"" 将是 "此路径中的所有文件都带有 .txt" 并且 “Set-Content A_1.txt”将是“覆盖现有文件”。
希望有人能帮助我,谢谢!
【问题讨论】:
【参考方案1】:您的第一个代码 sn-p 中已经有了一些解决方案,您需要再次迭代文件以执行替换和保存。
$txtFiles = Get-ChildItem -Name *.txt
ForEach ($file in $txtFiles)
(Get-Content $file) | ForEach-Object
$_ -replace '%','percent'
| Set-Content $file
第一行将所有文本文件添加到数组中,foreach 循环遍历数组的文件并获取文件的内容并卸载它 - 这就是括号的原因, Foreach-Object 然后遍历文件的内容并将其保存为与以前相同的文件名。
如果您跳过 Get-Content $file
周围的括号,该文件仍会加载到内存中,并且您会收到有关无法保存文件的错误消息。
【讨论】:
非常感谢!!!我正在考虑这样的方法,但我无法完成它!谢谢!以上是关于如何更改多个 .txt 文件中的字符并保存/覆盖 Powershell 中的现有文件的主要内容,如果未能解决你的问题,请参考以下文章
C# 将“X”次保存到一个 .txt 文件中而不覆盖最后一个字符串