「既知のフォルダ」パスを調べる
Windows 11では、既知のフォルダの実環境のパスを得る複数のAPIが用意されている。1つは、COMのIKnownFolderとIKnownFolderManagerインターフェースを使う方法だ。もう1つは、WinRTのWindows.Storage.KnownFoldersクラスを使うもの、あるいはWin32APIのシェル関数SHGetKnownFolderPathを使う方法などがある。しかし、これらは、どれもC++やC#などでプログラムを書かねばならず、「簡単」に使えるというものでもない。
Windows PowerShell(あるいはPowerShell 7.x)から簡単に既知のフォルダのパスを得る方法として、.NETの「System.Environment」クラスの「GetFolderPath」メソッドがある。具体的には、以下のようになる。
[Environment]::GetFolderPath('Desktop')
上記は、デスクトップのパスを得る方法である。パラメーターとして指定可能な既知のフォルダは、実パスを持つもの(仮想フォルダーでないもの)に限定されており、CSIDL名を使う。その一覧は、以下にある。
●Environment.SpecialFolder 列挙型
https://learn.microsoft.com/ja-jp/dotnet/api/system.environment.specialfolder?redirectedfrom=MSDN&view=netframework-4.8.1
ここにある「フィールド」の表の先頭の文字列か、次の列にある数字を指定する。たとえば、デスクトップなら「GetFolderPath(0)」でもよい。実はこの数字がCSIDLで使われていた定数である。カッコで囲んでおけば、戻ってくるパスを他のPowerShellコマンドの引数にできる。
この列挙型自体は、PowerShellからは「[Environment+SpecialFolder]」としてアクセスでき、「[Environment+SpecialFolder]::desktop」とすることでデスクトップフォルダを指定できる。
[Environment]::GetFolderPath([Environment+SpecialFolder]::Desktop)
「[Environment+SpecialFolder]」を使う方法は、面倒そうに見えるが、補完機能が使えるため、カッコ中の「::」の後ろで「D」キーを押したあとタブキーで補完候補を出せる。このクラスで開くことができる「既知のフォルダ」の一覧を得たければ
[Enum]::GetNames([Environment+SpecialFolder])
とする。
日本語の場合、既知のフォルダには、ローカライズされた名称がつく。たとえば、「MyPicture」は「ピクチャ」となる。これを得るには、COMオブジェクト「Shell.Application」を作り、その“NameSpace”から実パスを使って日本語名を探す。
$shell = New-Object -ComObject Shell.Application
$shell.NameSpace([Environment]::GetFolderPath('mypicture')) | select title
残念ながらcmd.exeには、既知のフォルダのパスを得るためのコマンドはないが、pwsh.exe(PowerShell)、powershell.exe(Windows PowerShell)をコマンドとして使い、forコマンドで環境変数に入れる。具体的には以下のようになる。
for /f "usebackq delims=" %A in (`pwsh.exe -noprofile -command "[Environment]::GetFolderPath('Desktop')"`) do set MYP=%A
これで環境変数“MYP”にデスクトップフォルダーのパスが入る。
既知のフォルダは、利用頻度が高く、スクリプトなどからもアクセスすることも多い。しかし、スクリプトの可用性や相互運用性を考えると、パスを決め打ちすることはできない。その場合、CSIDL名や番号を使って、パスを得る必要がある。それほど難しいことではないので、1回パターンを覚えれば、使い回しが可能だ。
この連載の記事
-
第429回
PC
Windows Updateの「利用可能になったらすぐに最新の更新プログラムを入手する」はオンにした方がいいか? -
第429回
PC
WindowsからWordPadが廃止! RTF(Rich Text Format)はどうなる? -
第428回
PC
Google/Bingで使える検索オプション -
第427回
PC
WindowsのPowerShellのプロファイルを設定する -
第426回
PC
WindowsでAndroidスマホをWebカメラにする機能を試した -
第425回
PC
無料で使えるExcelにWord、Microsoft 365のウェブ版を調べた -
第424回
PC
Windowsの基本機能であるクリップボードについてあらためて整理 -
第423回
PC
PowerShellの今を見る 2つあるPowerShellはどっち使えばいい? -
第422回
PC
Windows 11の目玉機能が早くも終了、Windows Subsystem for Android(WSA)を振り返る -
第421回
PC
進化しているPowerToys LANで接続したマシンでキーボード/マウス共有機能などが追加 -
第420回
PC
Windowsプレビュー版に搭載されたsudoを試す - この連載の一覧へ