LoginSignup
0
0

More than 3 years have passed since last update.

PowerShellで指定ディレクトリとその配下【以外】を削除する

Posted at

背景

色々ありまして。

やりたいこと

.
├── directoryA ←消す
├── directoryB ←残す
│   ├── fileB-1.txt ←残す
│   └── fileB-2.txt ←残す
├── directoryC ←消す

環境

$PSVersionTable
Name                           Value
----                           -----
PSVersion                      5.1.18362.752
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.18362.752
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

Remove-Item -Exclude -Recurseでできるのでは?

出来なかったです。試してみたところ、確かに-Exluceで除外指定したディレクトリは削除されませんが、除外指定したディレクトリの配下のファイルが削除されてしまいます。

Remove-Item -Path "." -Exclude "directoryB" -Recurse -Force
.
├── directoryA ←消える
├── directoryB ←残る
│   ├── fileB-1.txt ←消える
│   └── fileB-2.txt ←消える
├── directoryC ←消える

なんで?

仕方ないので、Get-ChildItemを使うことにします。

Get-ChildItemで削除対象を絞り込む

Get-ChildItem -Path "." -Exclude "directoryB" | Remove-Item -Recurse -Force
.
├── directoryA ←消える
├── directoryB ←残る
│   ├── fileB-1.txt ←残る
│   └── fileB-2.txt ←残る
├── directoryC ←消える

こうすると、directoryBとその配下は残しつつ、他のアイテム(ディレクトリとファイル)を削除可能です。
ちなみに-whatifオプションを指定すると、削除結果をシミュレーションできます。
テストのためになんども実ファイルを作るのは面倒なので、ありがたいですね。

まとめ

Remove-ItemのRecurseオプションは、直感と異なる動作をしますね、、、

参考

Remove-Item

Exlcludeオプションで指定するディレクトリは、外部ファイルから読みこむ方法も取れます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0