LoginSignup
3
3

More than 1 year has passed since last update.

PowerShellで特殊フォルダのパスを取得する

Last updated at Posted at 2021-12-29

PowerShellで特殊フォルダの一覧だったり、そのパスを取得する方法を毎回しらべている気がするのでまとめます。

.NetではSystem.Environmentクラスから特殊フォルダパスを取得する事ができるため、これを利用します。

ドキュメント

Environment クラス

特殊フォルダの一覧を取得する

Environment.SpecialFolder 列挙型

EnvironmentクラスではSpecialFolder列挙型に特殊フォルダの定数が格納されているので下記で表示できます。

特殊フォルダの一覧を取得する
[Environment+SpecialFolder].GetEnumNames()

ちなみにEnvironmentとSpecialFolderの区切り文字として+を利用していますが、これは入れ子になっている内部クラスにアクセスする際の区切り文字が+なためのようです。

完全修飾型名を指定する

特殊フォルダのフルパスを取得する

Environment.GetFolderPath メソッド

Environmentクラスに GetFolderPathメソッドがあり、このメソッドにEnvironment+SpecialFolderを渡すとフルパスが取得できます。

:Windowsのフォルダパスを取得する
[Environment]::GetFolderPath([Environment+SpecialFolder]::Windows)

image.png

すべての特殊フォルダのフルパスが取得したい場合は下記のように実行すれば取得できます。

すべてのフルパスを取得
[Environment+SpecialFolder].GetEnumNames() | Sort-Object | Select-Object @{Name="Name";Expression={$_}} , @{Name="Path";Expression={[Environment]::GetFolderPath($_)}}

参考

Why is a plus operator required in some Powershell type names?
Plus (+) in .NET Class Names
Explore Your [Environment]
PowerShellで入れ子のクラス(内部クラス)を示すには + を使う話

総評

毎回ぐぐっている気がするのでまとめました。

.NETクラスで+って入れ子の内部クラスにアクセスするための文字でPowerShellだと+にしないと動かないというのは、そうなの? って感じがするところではあるかと思います。

3
3
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
3
3