Set-Content将创建新文件但不会替换旧文件

时间:2018-06-05 18:35:32

标签: powershell input output

我有一个Powershell脚本,可以跟踪库存文本文件。我想用脚本更新文本文件。以下行将根据用户的请求从库存中删除项目:

Get-Content inventory | Where-Object {$_ -notmatch "$removed"} | Set-Content inventory.new

它工作正常,但我想更新原始库存文件,即我不想制作" inventory.new,"我只是想更新"库存。"如果我将inventory.out替换为inventory,则会出现以下错误:

Set-Content : The process cannot access the file 'path\inventory' because it is being used by another process.

有趣的是,我 能够删除inventory,然后将inventory.out重命名为inventory。同样,这有效但不是理想的。我觉得愚蠢只是测试它。必须有一个更优雅的解决方案!

1 个答案:

答案 0 :(得分:1)

我对它的理解是,当您使用Get-Content打开文件时,该文件一直在使用,直到该命令结束,因此在Get-Content释放文件之前,它不会让您进行更改。

一个简单的解决方法可能是:

$inventory = Get-Content inventory | Where-Object {$_ -notmatch "$removed"}
$inventory | Set-Content inventory