シンプルなアイテム削除ワンライナーの改良

シンプルなアイテム削除ワンライナーの改良

そこで、削除項目のワンライナーをアップグレードしたいと考えていました。メインのファイルパス (\HQDEVAPP004\C$\LoneStar\ProcessorHandlers\Test) を、スクリプトの先頭で定義される 2 つの変数に分割したいのです。次のようになります。

  1. $rootdir = "\HQDEVAPP004\C$\LoneStar"
  2. $svcdir = {ここにサービス名を挿入} (つまり、メッセージ ルーター、プロセッサ ハンドラー)

次に、完全なディレクトリ パスである 3 番目の変数を作成します。これは、1 + 2 を結合するだけです。これは、「+」演算子で実行できることはわかっていますが、間違っていたら訂正してください。

最終的には、foreach ループを実行して svcdir パスを取得して設定し、ファイルを削除したい場所の完全なディレクトリ パスを動的に結合し、削除プロセスを実行してから、次のサービスのフォルダーに移動できるようになる予定です。正しく説明できたと思います。万が一、私が使用している 1 行を確認したい場合は、以下に示します。

Get-ChildItem -recurse \\HQDEVAPP004\C$\LoneStar\ProcessorHandlers\Test\*.* | Remove-Item

答え1

まず、PathとLiteralPathプロパティはRemove-Itemワイルドカードを受け入れるので、現在のワンライナーはワイルドカードなしでも動作します。Get-ChildItem

Remove-Item \\HQDEVAPP004\C$\LoneStar\ProcessorHandlers\Test\*.* -Recurse -Force

「接着」については、Join-Pathまたは Format 演算子 のいずれかをお勧めします-f

Join-Path例 (これにより、バックスラッシュを気にする必要がなくなります):

PS C:\> $rootdir = "\\HQDEVAPP004\C$\LoneStar"
PS C:\> $svcdir = "Message Router"
PS C:\> Join-Path $rootdir $svcdir
\\HQDEVAPP004\C$\LoneStar\Message Router

-f例 ({0}指定した引数が配置される場所に注意してください):

PS C:\> $rootdir = "\\HQDEVAPP004\C$\LoneStar\{0}"
PS C:\> $svcdir = "Message Router"
PS C:\> $rootdir -f $svcdir
\\HQDEVAPP004\C$\LoneStar\Message Router

はい、すべてのパスに対して foreach を実行してこの接着作業を行うことができますが、Remove-Item配列を処理できるため、必要なすべてのパスを直接指定することもできます。

cd "\\HQDEVAPP004\C$\LoneStar"
Remove-Item ".\Message Router\*.*",".\SomeOtherPath" -Recurse -Force

関連情報