我有一个文本文件,我想从该文件中删除特殊字符。例如:Sample @位于文件Tess.txt
中我想从文本文件中删除特殊字符,并希望输出为: - Sample
我使用了以下的powershell脚本,但是尽管替换了特殊字符,它仍然是从我的文件中删除文本。
Powershell "Get-Content C:\Tess.txt | ForEach-Object { $_ -replace '@' } > C:\Tess.txt"
当我尝试将文件输出到Tess1.txt时,我看到正确的输出Sample。
Powershell "Get-Content C:\Tess.txt | ForEach-Object { $_ -replace '@' } > C:\Tess1.txt"
但我不想创建新的文本文件。我只想从现有文件中删除@。
我是PowerShell脚本新手。请帮忙。
答案 0 :(得分:1)
如果没有先将整个文件读入内存,就无法在管道中执行此操作:
(Get-Content C:\Tess.txt) | ForEach-Object { $_ -replace '@' } > C:\Tess.txt
这是因为Get-Content
一次读取一行文件,然后将其传递给管道,然后在请求下一行之前等待管道完成该行。这意味着您在完成阅读之前尝试覆盖该文件。
在括号中包装Get-Content
表达式将强制在启动管道之前读取所有文件内容,以便在脚本尝试覆盖它时不再读取该文件。