怠日記

写真・金魚・昆虫・プログラミングの趣味を語るサイトです。似たようなことをnoteにも書いたり書いてなかったり。

VBScript - Windows の特殊フォルダを取得する

VBScriptWindows の特殊フォルダを取得する方法は3つあります。

  • FileSystemObject の GetSpecialFolder を使う
  • Shell オブジェクトの SpecialFolders コレクションから取得する
  • 環境変数から取得する

FileSystemObject の GetSpecialFolder を使う

FileSystemObject の GetSpecialFolder を使って特殊フォルダを取得できます。

GetSpecialFolder は指定された特殊フォルダのオブジェクトを返します。

この方法で取得できるのは、下表にある3つのフォルダです。

フォルダの種類定数
Windows フォルダWindowsFolder0
System フォルダSystemFolder1
Temp フォルダTemporaryFolder2

使用例

次のスクリプトは、それぞれの特殊フォルダのパスを表示します。

'Windows フォルダ
WScript.Echo fso.GetSpecialFolder(0).Path
'  → C:\Windows
'System フォルダ
WScript.Echo fso.GetSpecialFolder(1).Path
'  → C:\Windows\System32
'Temp フォルダ
WScript.Echo fso.GetSpecialFolder(2).Path
'  → C:\Users\username\AppData\Local\Temp

Shell オブジェクトの SpecialFolders コレクションから取得する

WshShell オブジェクトの SpecialFolders コレクションから取得することもできます。

SpecialFolders コレクションにはすべての特殊フォルダのパスが設定されています。

次のスクリプトは、すべての特殊フォルダのパスを表示します。

Dim shell
Set shell = CreateObject("WScript.Shell")
Dim path
For Each path In shell.SpecialFolders
    WScript.Echo path
Next

ただ、これではどのパスが何の特殊フォルダなのか分かりません。

なので通常は特殊フォルダを指定して取得します。

特殊フォルダの指定は、SpecialFolders コレクションの Item プロパティで行います。
(Item プロパティは省略可)

次のスクリプトは、デスクトップのパスを表示します。

Dim shell
Set shell = CreateObject("WScript.Shell")
WScript.Echo shell.SpecialFolders.Item("Desktop")
' → C:\Users\username\Desktop
'Item プロパティを省略することもできます
WScript.Echo shell.SpecialFolders("Desktop")

SpecialFolders に指定できる内容は以下のとおりです。

指定する値返ってくるフォルダ
AllUsersDesktopすべてのユーザーのデスクトップ
AllUsersStartMenuすべてのユーザーのスタートメニュー
AllUsersProgramsすべてのユーザーのスタートメニュー → プログラム
AllUsersStartupすべてのユーザーのスタートアップ
Desktopデスクトップ
Favoritesお気に入り
Fontsフォント
MyDocumentsドキュメント
NetHoodネットフォルダ
PrintHoodプリンターフォルダ
Programsスタートメニュー → プログラム
Recent最近使ったファイル
SendTo送る
StartMenuスタートメニュー
Startupスタートアップ
Templatesテンプレート
AppDataアプリケーションデータ

環境変数から取得する

環境変数を取得するには ExpandEnvironmentStrings メソッドを使います。

引数には環境変数名を % で囲んだ値を指定します。

shell.ExpandEnvironmentStrings(%環境変数名%)

次のスクリプト環境変数「TEMP」の内容を出力します。

Dim shell
Set shell = CreateObject("WScript.Shell")
WScript.Echo shell.ExpandEnvironmentStrings("%TEMP%")
' → C:\Users\username\AppData\Local\Temp

現在設定されている環境変数を表示するには、コマンドプロンプトから SET コマンドを実行します。
SET コマンドのパラメーターには何も指定しないでください。

C:\Users\username> set
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\username\AppData\Roaming