2016-11-08 59 views
3

私は、ディレクトリの存在をチェックする小さなスクリプトを作成しています。存在する場合は削除します。私は有益な出力を持ってしようとしています、そのように私は、フォルダが削除された確認出力したい:Powershellで改行なしの書き込み出力?

:私が目指していますが

Deleting C:\wherever\folder1... 
Done 
Deleting C:\wherever\folder2... 
Done 

foreach ($e in $directoriesToRemove) 
    { 
     Write-Output "Deleting $e`..." 
     Remove-Item $e -recurse 
     Write-Output "Done" 
    } 

にこのビーイングの出力を

Deleting C:\wherever\folder1... Done 
Deleting C:\wherever\folder2... Done 

私はWrite-Hostを-nonewlineパラメータで使用することができますが、可能ならばWrite-Hostの使用を避けたいと思います。

フォルダーが削除して一度に行全体を書き込むまで待つ以外の方法がありますか? 私はこのラインが機能することがわかってきましたが、書き込み出力コマンド内の削除コマンドを置くことは、安全/ベストプラクティスである場合、私は知らない。

Write-Output "Deleting $e`... $(Remove-Item $e -recurse) Done" 
+2

いいえ、AFAIK。また、コマンドを内部に置くことは、* 'write-output'が実行される前に評価するだけです。 – wOxxOm

答えて

2

ここでは、2つのコマンドレット

の違いはあります

Write-Outputは、オブジェクトを作成してパイプラインにデータを送信する場合に使用する必要がありますが、必ずしも画面に表示する必要はありません。パイプラインは、それを最初に使用するものがなければ、最終的にデフォルトに書き出します。

Write-Hostは、逆の場合に使用する必要があります。 [コンソール] :: WriteLineは本質的にWrite-Hostがバックグラウンドで何をしているかを表します

私が理解していることは、パイプで2つの文字列を連結しようとすると解釈できますが、ここにホスト?

$(foreach ($a in $animals){Write-Output "buying a $a"; Write-Output " ... done"}) | % {$action="";$i=0}{if(($i%2) -eq 0){$action=$_}else{Write-Output "$action $_"};$i++} 
関連する問題