ファイル名、パス名を取得する
概要
ファイル名、パス名を取得する方法。
FileSystemObjectのパス関係のメソッド
メソッド | 説明 |
---|---|
GetAbsolutePathName | フルパスを返す |
GetBaseName | 拡張子を除いたファイル名を返す |
GetExtensionName | 拡張子を返す |
GetFileName | ファイル名を返す |
GetDriveName | ドライブ名を返す |
GetParentFolderName | 親フォルダ名を返す |
BuildPath | 文字列をつないでパスを返す |
GetSpecialFolder | 特殊フォルダのパスを返す |
指定したファイルのファイル名やパスを取得する
以下のスクリプトファイルは、テキストファイルtest.txt
と一緒にC:\Script
フォルダ内に置いてあるとする。
Dim fso, path
Set fso = CreateObject("Scripting.FileSystemObject")
'フルパスで指定した場合
path = "C:¥Script¥test.txt"
Msgbox fso.GetAbsolutePathName(path) 'C:¥Script¥test.txt
Msgbox fso.GetBaseName(path) 'test
Msgbox fso.GetExtensionName(path) 'txt
Msgbox fso.GetFileName(path) 'test.txt
Msgbox fso.GetDriveName(path) 'C:
Msgbox fso.GetParentFolderName(path) 'C:¥Script
'ファイル名で指定した場合
path = "test.txt"
Msgbox fso.GetAbsolutePathName(path) 'C:¥Script¥test.txt
Msgbox fso.GetBaseName(path) 'test
Msgbox fso.GetExtensionName(path) 'txt
Msgbox fso.GetFileName(path) 'test.txt
Msgbox fso.GetDriveName(path) '
Msgbox fso.GetParentFolderName(path) '
'長さ0の文字列で指定した場合
path = ""
Msgbox fso.GetAbsolutePathName(path) 'C:¥Script
Msgbox fso.GetBaseName(path) '
Msgbox fso.GetExtensionName(path) '
Msgbox fso.GetFileName(path) '
Msgbox fso.GetDriveName(path) '
Msgbox fso.GetParentFolderName(path) '
'現在の作業フォルダで指定した場合
path = "."
Msgbox fso.GetAbsolutePathName(path) 'C:¥Script
Msgbox fso.GetBaseName(path) '
Msgbox fso.GetExtensionName(path) '
Msgbox fso.GetFileName(path) '.
Msgbox fso.GetDriveName(path) '
Msgbox fso.GetParentFolderName(path) '
'現在の作業フォルダの親フォルダで指定した場合
path = ".."
Msgbox fso.GetAbsolutePathName(path) 'C:¥
Msgbox fso.GetBaseName(path) '.
Msgbox fso.GetExtensionName(path) '
Msgbox fso.GetFileName(path) '..
Msgbox fso.GetDriveName(path) '
Msgbox fso.GetParentFolderName(path) '
引数のファイルが実在しなくてもエラーは発生せず値は返ってくる。
BuildPathメソッド
2つの引数を適宜\
を補足してつないだパスを返す。
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
Msgbox fso.BuildPath("C:\Script", "test.txt") 'C:\Script\test.txt
Msgbox fso.BuildPath("C:\Script\", "test.txt") 'C:\Script\test.txt
Msgbox fso.BuildPath("C:\Script", "\test.txt") 'C:\Script\test.txt
Msgbox fso.BuildPath("C:\Script\", "\test.txt") 'C:\Script\test.txt
Msgbox fso.BuildPath("C:\Script\test.txt", "new.txt") 'C:\Script\test.txt\new.txt
Msgbox fso.BuildPath("C:", "test.txt") 'C:test.txt
Msgbox fso.BuildPath("C:\", "test.txt") 'C:\test.txt
ただし下から2番目の場合は\
を補足してくれない。
GetSpecialFolderメソッド
特殊フォルダを取得できる。
引数 | 説明 |
---|---|
0 | Windowsフォルダ |
1 | システムフォルダ |
2 | Tempフォルダ |
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
Msgbox fso.GetSpecialFolder(0) 'C:\Windows
Msgbox fso.GetSpecialFolder(1) 'C:\Windows\System32
Msgbox fso.GetSpecialFolder(2) 'C:\Users\ログインユーザ\AppData\Local\Temp
上記のGetSpecialFolderメソッドで取得できるのはフォルダオブジェクトだが、Msgboxに渡されるとパス(デフォルトプロパティ)が表示される。
WshShellオブジェクトのSpecialFoldersプロパティ
SpecialFoldersコレクションを取得し、特殊フォルダのパスを取得できる。
Dim col
Set col = CreateObject("WScript.Shell").SpecialFolders
Msgbox col(0) 'C:\Users\Public\Desktop
Msgbox col("AllUsersDesktop") 'C:\Users\Public\Desktop
取得できるパス一覧
数値 | 指定名 | 説明 |
---|---|---|
0 | AllUsersDesktop | 全ユーザ共通のデスクトップ |
1 | AllUsersStartMenu | 全ユーザ共通のスタートメニュー |
2 | AllUsersPrograms | 全ユーザ共通のスタートメニューのプログラムフォルダ |
3 | AllUsersStartup | 全ユーザ共通のスタートアップフォルダ |
4 | Desktop | デスクトップ |
5 | AppData | アプリケーションデータ |
6 | PrintHood | プリンタ |
7 | Templates | テンプレート |
8 | Fonts | フォント |
9 | NetHood | ネットワーク |
10 | Desktop | デスクトップ |
11 | StartMenu | スタートメニュー |
12 | SendTo | 送るフォルダ |
13 | Recent | 最近使ったファイル |
14 | Startup | スタートアップフォルダ |
15 | Favorites | お気に入り |
16 | MyDocuments | マイドキュメント |
17 | Programs | プログラムフォルダ |
WshShellオブジェクトのCurrentDirectoryプロパティ
現在の作業フォルダの取得と変更ができる。
使用例
Dim shell
Set shell = CreateObject("WScript.Shell")
'取得
Msgbox shell.CurrentDirectory 'C:\Script
'変更
shell.CurrentDirectory = "C:\Test"
Msgbox shell.CurrentDirectory 'C:\Test
VBAだとChDir
とChDrive
を使って現在の作業フォルダを変更できるが、ネットワーク上の共有フォルダを指定するには、ネットワークドライブを設定しておく必要があった。
VBAでも上記のやり方で、ネットワーク上の共有フォルダを指定できて、「ファイルを開く」ダイアログボックスの初期に表示されるフォルダを制御できる。
WScriptオブジェクトのパス関係のプロパティ
WSHプログラムや実行中のスクリプトのパスを取得できる。
プロパティ | 説明 |
---|---|
Name | Windows Script Host という文字列 |
Path | Windows Script Hostプログラムがある場所 |
ScriptName | スクリプトファイルのファイル名 |
ScriptFullName | スクリプトファイルのフルパス |
使用例
Msgbox WScript.Name
Msgbox WScript.Path
Msgbox WScript.ScriptName
Msgbox WScript.ScriptFullName
GetAbsolutePathNameメソッドについて
起動したスクリプトファイルと同じフォルダ内にあるtest.txt
の絶対パスを取得したい場合
Dim fso, buf
Set fso = CreateObject("Scripting.FileSystemObject")
buf = fso.GetAbsolutePathName("test.txt")
で取得できるが、フォルダがネットワーク上の共有フォルダである場合は(共有フォルダでなくローカルのシステムフォルダが作業フォルダになってしまうので)うまくいかない。その場合は
Dim fso, buf
Set fso = CreateObject("Scripting.FileSystemObject")
buf = fso.GetParentFolderName(WScript.ScriptFullName) & "\" & "test.txt"
で取得できる。ただし以下のやり方でも取得できる。
Dim fso, buf
Set fso = CreateObject("Scripting.FileSystemObject")
buf = fso.GetAbsolutePathName(WScript.ScriptFullName & "\..\test.txt")
test.txt
がスクリプトファイルの一つ上の階層にある場合も、以下のようにすればよい。
Dim fso, buf
Set fso = CreateObject("Scripting.FileSystemObject")
buf = fso.GetAbsolutePathName(WScript.ScriptFullName & "\..\..\test.txt")
GetParentFolderName
を2重に適用するよりは、こちらのほうが使いやすい。