Powershell脚本不会覆盖该文件,但会创建一个新文件并对其进行过度加载

Powershell脚本不会覆盖该文件,但会创建一个新文件并对其进行过度加载,powershell,Powershell,我正在使用此Powershell脚本替换文件的内容: $lines = Get-Content -Path D:\file.txt -Encoding UTF8 -Raw $option = [System.Text.RegularExpressions.RegexOptions]::Singleline $pattern1 = [regex]::new("(\[\.dfn \.term])#(.*?)#", $option) $lines = $pattern1.Rep

我正在使用此Powershell脚本替换文件的内容:

$lines = Get-Content -Path D:\file.txt -Encoding UTF8 -Raw
$option = [System.Text.RegularExpressions.RegexOptions]::Singleline 

$pattern1 = [regex]::new("(\[\.dfn \.term])#(.*?)#", $option)
$lines = $pattern1.Replace($lines, '$1_$2_')

$pattern2 = [regex]::new("(\[what you want])#(.*?)#", $option)
$lines = $pattern2.Replace($lines, '$1*$2*')
它应该在文件中找到一些内容并覆盖文件。但它不会覆盖

但是,如果我像这样使用脚本:

$lines = Get-Content -Path D:\file.txt -Encoding UTF8 -Raw
$option = [System.Text.RegularExpressions.RegexOptions]::Singleline 

$pattern1 = [regex]::new("(\[\.dfn \.term])#(.*?)#", $option)
$lines = $pattern1.Replace($lines, '$1_$2_')

$pattern2 = [regex]::new("(\[what you want])#(.*?)#", $option)
$lines = $pattern2.Replace($lines, '$1*$2*')

$lines | Set-Content -Path D:\result.txt -Encoding UTF8 
脚本将创建一个新文件并将结果写入其中。它甚至会在每次运行脚本时覆盖result.txt。但是,如果我明确表示要将结果写入file.txt,它将不会这样做

如何使脚本覆盖现有文件

我的主要测试是在Powershell版本5.1.19041.610中进行的

PS窗口中没有显式错误,文件也没有更改。但是如果我添加
$lines | Set Content-Path D:\result.txt-Encoding UTF8-Force

我还在Powershell 7.1.3.0版上测试了它

PS窗口中没有显式错误,文件也没有更改。但如果我不强制添加
$lines | Set Content-Path D:\result.txt-Encoding UTF8
,则会替换该文件


通常,获取内容会打开、读取和关闭文件

你可以试试

$lines | Set-Content -Path D:\result.txt -Encoding UTF8 -Force
-强迫 覆盖阻止命令成功执行的限制。武力将取代 文件的内容,即使该文件是只读的,但不会覆盖 安全权限。没有此参数,只读文件不会更改


如果执行
。| Set Content-Path D:\file.txt…
我可以在同一个文件中打开和重写。您的Powershell版本是什么?如果没有错误,我想-force可以解决一些问题(如果你的PS版本是旧的)@stackprotector,我没有收到错误消息。脚本刚刚运行。@VladimirMarkiev So,
。|设置内容-路径D:\file.txt
只是不覆盖您以前在中读取的
file.txt
?并且不会抛出任何错误?