2013-11-27 2 views
7

が空でないディレクトリを削除するのPowerShellのRemove-Itemを使用する場合は、確認のために要求されます:Remove-Itemが確認を求めるプロンプトを表示すると、自動的に「いいえ」が選択されます。

PS C:\Users\<redacted>\Desktop\Temp> Remove-Item .\Test 

Confirm 
The item at C:\Users\<redacted>\Desktop\Temp\Test has children and the Recurse parameter was not specified. If you 
continue, all children will be removed with the item. Are you sure you want to continue? 
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): 

私は非対話型モードでPowerShellを実行する場合、私の代わりにエラーが表示されます。

Remove-Item : Windows PowerShell is in NonInteractive mode. Read and Prompt functionality is not available. 
At line:1 char:1 
+ Remove-Item .\Test 
+ ~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (:) [Remove-Item], PSInvalidOperationException 
    + FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.RemoveItemCommand 

私は-Recurseを使ってRemove-Itemに "Yes"オプションを選択したかのように処理することができます。まるで私が「いいえ」オプションを選択したかのように進んでいくことができますか?

(ジャスト明確にするため:-Force-Confirm:$falseは私がここに欲しいものではありません。)あなたは、あなたがそれを削除しようとする前に、ディレクトリが空であるかどうかを判断するために、テスト・パスを使用することができます

答えて

1

これは私に役立ちました。ファイルは削除されず、スクリプトは続行されます。 NonInteractiveモードについてのエラーは引き続き表示されますが、[No]が応答されたようにコマンドが移動します。

remove-item c:\test\test 

Write-host "Files are still there, script still going" 

ちょうどそのエラー・メッセージのTry \キャッチでそれを包む

Try 
{ 
remove-item c:\test\test 
} 
Catch 
{ 

} 

Write-host "Files are still there, script still going" 
+1

非対話モードに関するエラーメッセージが表示されないようにするため、2番目のオプションを選択します。それについて考えると、Remove-Itemによってスローされた例外をキャッチすることは、とにかく行く方法でしょう。 (例外的なメッセージが非インタラクティブモードではなく、削除不能なフォルダについては不平を言っているのは奇妙なことです)。 –

2

if (-not (Test-Path .\Test\*.*)) 
    { Try 
    { Remove-Item .\Test -ErrorAction Stop } 
    Catch { Continue } 
    } 

Try Catchはエラーを処理します

+0

を抑制したい場合ははい、私はそれを削除しようとする前にディレクトリをテストすることができます。ただし、テストとRemove-Item呼び出しの間にディレクトリにファイルが追加された場合、競合状態が発生します。どのような状況でも、フォルダを削除できなくてもスクリプトを実行し続けるだけです。 –

+0

追加の要件のために更新されました。 – mjolinor

関連する問題