VBScript
Const WindowsFolder = 0
Const SystemFolder = 1
Const TemporaryFolder = 2
WScript.Echo "Special Folder List With WSH"
WScript.Echo "Toltal Folders Count(0 Start) = " & CreateObject("WScript.Shell").SpecialFolders.count
cnt = CreateObject("WScript.Shell").SpecialFolders.count
For i = 0 to cnt -1
WScript.Echo string(Clng(Len(Cstr(Cnt)))-len(i),chr(32)) & i & " : " & CreateObject("WScript.Shell").SpecialFolders(i)
Next
WScript.Echo VbCrLf & VbCrLF & "Special Folder List of FilesytemObject"
WScript.Echo "0:WindowsFolder is " & vbTab & CreateObject("Scripting.FileSystemObject").GetSpecialFolder(0).Path
WScript.Echo "1:SystemFolder is " & vbtab & CreateObject("Scripting.FileSystemObject").GetSpecialFolder(1).Path
WScript.Echo "2:TemporaryFolder is " & vbTab & CreateObject("Scripting.FileSystemObject").GetSpecialFolder(TemporaryFolder).Path
WScript.Echo "1:SystemFolder from EnvironmentStrings"
WScript.Echo VbCrLf & VbCrLF & "0:WindowsFolder from EnvironmentStrings %TWinDir% or %SystemRoot%"
WScript.Echo CreateObject("WScript.Shell").ExpandEnvironmentStrings("%WinDir%")
WScript.Echo VbCrLf & VbCrLF & "2:TemporaryFolder from EnvironmentStrings %TEMP% or %TMP%"
WScript.Echo CreateObject("WScript.Shell").ExpandEnvironmentStrings("%TEMP%")
WScript.Echo CreateObject("WScript.Shell").ExpandEnvironmentStrings("%TMP%")
WScript.Echo VbCrLf & VbCrLF & "OneDrive from EnvironmentStrings %OneDrive%"
WScript.Echo CreateObject("WScript.Shell").ExpandEnvironmentStrings("%OneDrive%")
WScript.Echo VbCrLf & VbCrLF
WScript.Echo CreateObject("WScript.Shell").ExpandEnvironmentStrings("%Path%")
WScript.Echo VbCrLf & VbCrLF & "List Of ExpandEnvionmentStrings %Path%"
Ar = Split(CreateObject("WScript.Shell").ExpandEnvironmentStrings("%Path%"),";")
For i = Lbound(ar) To Ubound(Ar) - 1
WScript.Echo string(Clng(Len(Cstr(Ubound(Ar))))-len(i),chr(32)) & i & " : " & ar(i)
Next
Windows 10での出力結果
Nameは実際はUserNameになります。
Special Folder List
Toltal Folders Count(0 Start) = 18
0 : C:\Users\Public\Desktop
1 : C:\ProgramData\Microsoft\Windows\Start Menu
2 : C:\ProgramData\Microsoft\Windows\Start Menu\Programs
3 : C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
4 : C:\Users\name\Desktop
5 : C:\Users\name\AppData\Roaming
6 : C:\Users\name\AppData\Roaming\Microsoft\Windows\Printer Shortcuts
7 : C:\Users\name\AppData\Roaming\Microsoft\Windows\Templates
8 : C:\Windows\Fonts
9 : C:\Users\name\AppData\Roaming\Microsoft\Windows\Network Shortcuts
10 : C:\Users\name\Desktop
11 : C:\Users\name\AppData\Roaming\Microsoft\Windows\Start Menu
12 : C:\Users\name\AppData\Roaming\Microsoft\Windows\SendTo
13 : C:\Users\name\AppData\Roaming\Microsoft\Windows\Recent
14 : C:\Users\name\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
15 : C:\Users\name\Favorites
16 : C:\Users\name\OneDrive\ドキュメント
17 : C:\Users\name\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
Special Folder List of FilesytemObject
C:\Users\name\AppData\Local\Temp
Special Folder List of FileSytemObject
0:WindowsFolder is C:\Windows
1:SystemFolder is C:\Windows\System32
2:TemporaryFolder is C:\Users\name\AppData\Local\Temp
以下略
説明
特に説明することはないんですけど、
- SpecialFolderは0番から始まる。
- Windows10は18ある
- 主に使うのはデスクトップ(10)とドキュメント(16)
- Windows10では開きにくくなったRecentはここから調べられる
- 番号で表示させてもよいし次のようにしてもよい。
- Windows10では16番はOneDriveを使っている時と使っていないときは違う
- 数字と名前の二通りの表記の仕方があり、一般的には名前で表示されている。
- SpecialFoldersで全部は取れない。一時フォルダはFilesystemObjectを使ってもよい。
- FileSystemObjectでしか容易に取得できないのは1のC:\Windows\System32
- Wscriptで一時フォルダなど他の特殊フォルダを取得する場合には環境変数から取得する。
- Ondriveなど、環境変数でのみ取得できるものもある
下のスクリプトはそれぞれ同じ意味になる
CreateObject("WScript.Shell").SpecialFolders(16)
CreateObject("WScript.Shell").SpecialFolders("mydocument")
CreateObject("WScript.Shell").SpecialFolders(10)
CreateObject("WScript.Shell").SpecialFolders("desktop")
環境変数でやくだつもの
環境変数は長くてスペースが含まれるフォルダ名に強い。Program Filesがその例。
これを使うとスペースなく表現できるため、文字列を結合する際にミスが少なくなる。
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
CommonProgramW6432=C:\Program Files\Common Files
ComSpec=C:\WINDOWS\system32\cmd.exe
HOMEPATH=\Users\name
windir=C:\WINDOWS
ProgramData=C:\ProgramData
ProgramFiles=C:\Program Files
ProgramFiles(x86)=C:\Program Files (x86)
ProgramW6432=C:\Program Files
参考
MSDN - FileSystemObject オブジェクト リファレンス メソッド>GetSpecialFolder メソッド
SpecialFolderを文字で表記する場合、また各フォルダの意味は以下を参照してください。
atmarkit - Windows管理者のためのWindows Script Host入門:第6回 WshShellオブジェクトの詳細(2)