読者です 読者をやめる 読者になる 読者になる

四十三庵

蔀の雑記帳

vbsのスクリプト内のファイルパスを相対パスで指定する方法

ちょっとしたことなんだけど、意外と探したら書いてなかったのでメモしておく。
すごい便利。

  • 状況

vbsを書くときに、ファイルを指定する場合がある。
たとえば、

Dim FSO 
Dim TSO

Set FSO = CreateObject("Scripting.FileSystemObject")
Set TSO = FSO("filepath")

という風に。

このパスの指定を、簡単に書けます、というのが今回の記事。

  • 僕が今知っている3つの方法

1.絶対パス指定

Dim FSO 
Dim TSO

Set FSO = CreateObject("Scripting.FileSystemObject")
Set TSO = FSO.OpenTextFile("C:\Documents and Settings\user\My Documents\file.txt")

(※海外キーボードのMacで読み書きしてると半角¥が\になる…)

絶対パスで指定するのは、あまりオススメしない。
後々ファイルの場所を変えたときに、プログラムの修正箇所が散在することになるからだ。

2.変数でパスを持たす

Dim FSO 
Dim TSO
Dim fullpath
Dim folderpath
Dim file
folderpath = "C:\Documents and Settings\user\My Documents"
file = "file.txt"

Set FSO = CreateObject("Scripting.FileSystemObject")
fullpath = FSO.BuildPath(folderpath, file)
Set TSO = FSO.OpenTextFile(fullpath)

今まで僕はこのやり方がスタンダードだと思ってた。

3.相対パス指定
今回紹介したいのがこれ。

Dim FSO 
Dim TSO

Set FSO = CreateObject("Scripting.FileSystemObject")
fullpath = FSO.BuildPath(folderpath, file)
Set TSO = FSO.OpenTextFile(".\file.txt")

前提として、このvbsファイルと「file.txt」ファイルが
「C:\Documents and Settings\user\My Documents」
の中に二つともあれば、この指定でよい。

「.\」でカレントディレクトリを指定できる。
「..\」で一個上のディレクトリも可能。

  • カレントディレクトリを変えれば

ふつーにvbsを実行すれば、
そのvbsファイルの入ってるフォルダがカレントディレクトリになるんだけど、
これを変更すれば、相対パス指定を使って、どんなフォルダでも指定できる。

バッチファイルを書くのが一番楽だと思うんだけど、
vbsでもカレントディレクトリ変更ができるみたい。

Set shell = WScript.CreateObject("WScript.Shell")
shell.CurrentDirectory = ".\sub"

(引用ここ)

そんな訳で、メモでした。