从文本文件中删除特殊字符将返回空白文件

时间:2015-04-09 18:20:18

标签: powershell powershell-v1.0

我有一个文本文件,我想从该文件中删除特殊字符。例如: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脚本新手。请帮忙。

1 个答案:

答案 0 :(得分:1)

如果没有先将整个文件读入内存,就无法在管道中执行此操作:

(Get-Content C:\Tess.txt) | ForEach-Object { $_ -replace '@' } > C:\Tess.txt

这是因为Get-Content一次读取一行文件,然后将其传递给管道,然后在请求下一行之前等待管道完成该行。这意味着您在完成阅读之前尝试覆盖该文件。

在括号中包装Get-Content表达式将强制在启动管道之前读取所有文件内容,以便在脚本尝试覆盖它时不再读取该文件。