簡體   English   中英

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM