如何更改多个 .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 文件中而不覆盖最后一个字符串

写入txt文件,但不覆盖

保存更改多个txt

如何修改文件名

如何在不覆盖之前数据的情况下创建多个 java txt 文件? [复制]

多进程比较多个 .txt 文件中的字符串?