我有一个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
。同样,这有效但不是理想的。我觉得愚蠢只是测试它。必须有一个更优雅的解决方案!
答案 0 :(得分:1)
我对它的理解是,当您使用Get-Content打开文件时,该文件一直在使用,直到该命令结束,因此在Get-Content释放文件之前,它不会让您进行更改。
一个简单的解决方法可能是:
$inventory = Get-Content inventory | Where-Object {$_ -notmatch "$removed"}
$inventory | Set-Content inventory