![](/img/trans.png)
[英]Set-Content Error : The process cannot access the file because it is being used by another process (Powershell)
[英]Powershell Set-Content empty file on error
我有一些腳本來修改hosts
。 是這樣的:
@echo off
Powershell.exe -NoProfile -Command "& { $var = cat c:\...\hosts;
$var = $var -replace '....','....'
try {
Set-Content c:\...\hosts $var -ErrorAction Stop
} catch {
echo 'CAN`T WRITE'; pause; exit 2;
}
}"
exit $LASTEXITCODE
這只是一個例子,真正的腳本更復雜。
問題是有時腳本顯示CAN'T WRITE
錯誤,但hosts
文件變為空,所有內容都消失了。 關於如何防止在Set-Content
錯誤中丟失文件內容的任何建議?
當你在 Try 塊中執行一條語句時,它實際上是被執行的。 然后,如果 $var 為 $null,則文本文件為空。 你會看到使用 Catch 塊的錯誤消息。 然后你可以保存之前的內容,如果發生錯誤,將原始文件返回到 Catch 塊中:
@echo off
Powershell.exe -NoProfile -Command "& { $var = cat c:\...\hosts;
$oldvar = $var
$var = $var -replace '....','....'
try {
Set-Content c:\...\hosts $var -ErrorAction Stop
} catch {
echo 'CAN`T WRITE'; pause; exit 2;
$oldvar | Set-Content C:\...\hosts
New-Item "Backup.txt" -Type File -Value $oldvar
}
}"
exit $LASTEXITCODE
$oldvar 將包含您以后可以使用的文本文件的原始內容。 為了更安全,如果再次寫入文件失敗,我已添加將內容寫入備份文件 (Backup.txt)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.