←
▼
▲
ファイルをコピーします
ファイルを移動します
フォルダを移動します
フォルダが存在するかどうかを返します
ファイルを削除します
フォルダをコピーします
ファイルが存在するかどうかを返します
Set g_fs = CreateObject("Scripting.FileSystemObject")
オブジェクトの取得
メンバ
フォルダを作成します。
WSH だけでなく VBA でも使えます。
関連
←
▼
▲
Set fs = CreateObject("Scripting.FileSystemObject")
fs.CopyFile "ipLibCom.h", "..\..\..\inc\ipLibCom.h", True
Set fs = Nothing
強制上書き
新しくできるファイル名も含める
src から dst にファイルをコピーします。
Sub FileSystemObject::CopyFile( src as string, dst as string [, overwrite as Bool] )
【引数】
src
コピーするファイルのパス(コピー元、ワイルドカード可)
dst
コピー先のファイルのパス
サンプル
overwrite
上書きするかどうか。 デフォルト True (*1)
False のとき、上書きしようとするとエラーになります。
(*1)
参考
エラー
src に指定したファイルが無いとき、エラー 76
←
▼
▲
src から dst にフォルダをコピーします。
Sub FileSystemObject::CopyFolder( src as string, dst as string [, overwrite as Bool] )
【引数】
src
コピーするフォルダのパス(コピー元、ワイルドカード可(*2))
dst
コピー先のフォルダのパス
overwrite
上書きするかどうか。 デフォルト True (*1)
False のとき、上書きしようとするとエラーになります。
(*1)
参考
(*2)
ワイルドカードは、コピー先にマッチしないときに限り使えます。
←
▼
▲
Function FileSystemObject::FileExists( path as string ) as Boolean
ファイルが存在するかどうかを返します。
ワイルドカードは使えません。
関連
→ Dir - ファイルの有無 (Excel)
←
▼
▲
Function FileSystemObject::FolderExists( path as string ) as Boolean
フォルダが存在するかどうかを返します。
ワイルドカードは使えません。
←
▼
▲
Sub FileSystemObject::MoveFile( src as string, dst as string )
src から dst にファイルを移動します。
【引数】
src
移動するファイル(移動元、ワイルドカード可)
dst
移動先のファイルパス(フォルダのときは、最後に \)
Set fs = CreateObject("Scripting.FileSystemObject")
fs.MoveFile "ipLibCom.h", "..\..\..\inc\ipLibCom.h"
Set fs = Nothing
新しくできるファイル名も含める
サンプル
【補足】
ドライブをまたぐときは、エラーになります
←
▼
▲
フォルダを移動します。
使い方は、
と同じです。
←
▼
▲
フォルダを作成します。
すでにフォルダがあるときは、エラーになります。
Dim g_fs : Set g_fs = CreateObject( "Scripting.FileSystemObject" )
If not g_fs.FolderExists( path **** ) Then g_fs.CreateFolder path ****
←
▼
▲
Set fs = CreateObject("Scripting.FileSystemObject")
WScript.Echo fs.GetFileName( "aa\bb.txt" ) // bb.txt と表示
パスの最後の部分(ファイル名、またはフォルダ名)を返します。
関連
サンプル:
Funtcion FileSystemObject::GetFileName( Path as string ) as string
←
▼
▲
FileSystemObject::GetExtensionName
Dim ext : ext = g_fs.GetExtensionName( path )
サンプル:
Funtcion FileSystemObject::GetExtensionName( Path as string ) as string
ファイルパスから拡張子を取り出します。
関連
Path
GetExtensionName
"C:\folder\file.txt"
"txt"
""
"C:\folder\file."
""
"C:\folder\file"
"C:\folder.files\file"
""
"file.html"
"html"
←
▼
▲
Function FileSystemObject::GetFile( path as string ) as File
指定したパスに対応するファイルオブジェクトを返します。
←
▼
▲
Function FileSystemObject::GetFolder( path as string ) as Folder
指定したパスに対応するフォルダー・オブジェクトを返します。
指定したパスにフォルダーが無いときはエラーになります。
参考
←
▼
▲
Function FileSystemObject::GetParentFolderName( path as string ) as string
親フォルダのパスを返します。
path 引数
返り値
"C:\folder\file.txt"
"C:\folder"
"C:\folder"
"C:\"
"C:\"
""
""
""
"C:/folder"
"C:/folder/file.txt"
"http://www.a.com/a.htm"
"http://www.a.com"
"http://www.a.com/"
"http:"
"a\b\file.txt"
"http://www.a.com"
"http:"
"C:\"
"C:\folder\"
"a\b"
""
"file.txt"
"a"
"a\b"
ファイル名だけのときは "" が返るため、次のようなコードは避けてください。
g_fs.GetParentFolderName( fname ) +"\"+ g_fs.GetBaseName( exe_base_name )
関連
"\folder\"
""
"\folder\file.txt"
"\folder"
分類
フル・パス
相対パス
ファイル名
Linux 形式
URL
← 注意
← 注意
← 注意
""
"a"
←
▼
▲
Function FileSystemObject::OpenTextFile( path as string, [iomode as integer],
[b_create as boolean], [unicode as integer] ) as TextStream
ファイルを開きます。 ファイルの作成または読み込みを開始します。
【引数】
path
ファイルのパス
iomode
1=リード、2=ライト、8=追加、省略時=1
b_create
ファイルが無いときにエラーに「しない」かどうか
unicode
返り値
TextStream オブジェクト
True=Unicode, False=Ascii, -2=自動判定
Const ForReading = 1, ForWriting = 2, ForAppending = 8
エラー
関連
←
▼
▲
Function FileSystemObject::CreateTextFile( path as string,
[b_overwrite as boolean], [b_unicode as boolean] ) as TextStream
ファイルを作成します。
【引数】
path
ファイルのパス
b_overwrite
上書きするかどうか, デフォルト=False
b_unicode
返り値
TextStream オブジェクト
True=Unicode, False=Ascii, デフォルト=False
b_overwrite = False にして、ファイルがすでに存在していたときは、エラー
になります。
path のファイルを格納するフォルダが存在しないときは、エラー
になります。
関連
←
▼
▲
Sub FileSystemObject::DeleteFile( path as string, [force as boolean] )
ファイルを削除します。
【引数】
path
削除するファイルのパス
iomode
True なら、リードオンリーでも強制削除
path に指定したパスに、ファイルが存在しないとエラーになります。
読み取り専用になっているファイルを指定すると、エラー70になります。
←
▼
▲
Sub FileSystemObject::DeleteFolder( path as string, [force as boolean] )
フォルダを削除します。
【引数】
path
削除するフォルダのパス
force
True なら、リードオンリーでも強制削除
フォルダの中にファイルがあっても削除します。
←
▼
▲
Function FileSystemObject::GetTempName() as string
ファイル名(8.3形式)に使えるランダムな文字列を返します。
radB238E.tmp
返り値の例:
関連
←
▼
▲
ファイルサイズ(バイト)
拡張子の説明。例:"テキスト ドキュメント"
.Size
.Type
プロパティ
.Copy
.Delete
.Move
.OpenAsTextStream
メソッド
.Path
.Name
.ShortPath
.ShortName
フルパス (処理が遅いです)
ファイル名。フォルダパスを除いたもの。例:a.txt (処理が遅いです)
フルパス(8.3形式)
ファイル名(8.3形式)
Drive オブジェクト
親フォルダ(
作成日時(取得のみ)
更新日時(取得のみ)
アクセス日時(取得のみ)
.Drive
.ParentFolder
.DateCreated
.DateLastModified
.DateLastAccessed
)
File オブジェクトは、
で、取得できます。
Set g_fs = CreateObject("Scripting.FileSystemObject")
Set file = g_fs.GetFile( "list.txt" )
WScript.Echo file.DateLastModified
属性。 読み取り専用、隠しファイルなど
←
▼
▲
Dim File::DateLastModified as Date
Set g_fs = CreateObject("Scripting.FileSystemObject")
Set file = g_fs.GetFile( "list.txt" )
WScript.Echo file.DateLastModified
キーワード:
Set g_fs = CreateObject("Scripting.FileSystemObject")
WScript.Echo g_fs.GetFile( "list.txt" ).DateLastModified
関連
タイムスタンプに依存するテストは、ソースのバージョン管理ソフトを使うと、
正しく動かない可能性があります。 なぜなら、バージョン管理ソフトは
タイムスタンプを勝手に変えてしまうからです。
この問題に対処するには、テストで使うファイルを zip 圧縮しておきます。
更新日時。 このプロパティは、読み取り専用です。
サンプル
の Stamp (vbslib)
←
▼
▲
Dim File::Attributes as Long
属性。 読み取り専用、隠しファイルなど
サンプル
Set g_fs = CreateObject("Scripting.FileSystemObject")
Set file = g_fs.GetFile( path )
file.Attributes = file.Attributes or ReadOnly
file = Empty
などが使えます
Set g_fs = CreateObject("Scripting.FileSystemObject")
SetFilesToNotReadOnly g_fs.GetFolder( "C:\folder" )
Sub SetFilesToNotReadOnly( folder )
For Each file In folder.Files
file.Attributes = file.Attributes and not ReadOnly
Next
For Each sub_folder In folder.SubFolders
SetFilesToNotReadOnly sub_folder
Next
End Sub
サンプル
Set g_fs = CreateObject("Scripting.FileSystemObject")
is_read_only = ( ( g_fs.GetFile( path ).Attributes and ReadOnly ) <> 0 )
サンプル
Set g_fs = CreateObject("Scripting.FileSystemObject")
Set file = g_fs.GetFile( path )
file.Attributes = file.Attributes and not ReadOnly
file = Empty
サンプル
参考
キーワード:
←
▼
▲
.DateCreated
.DateLastModified
.DateLastAccessed
プロパティ
.Copy
.Delete
.Move
.OpenAsTextStream
メソッド
.Size
.Type
.Attributes
直下のファイル(
直下のサブフォルダ(Folder オブジェクト)のコレクション
.Path
.Name
.ShortPath
.ShortName
フルパス (処理が遅いです)
フォルダ名 (処理が遅いです)
フルパス(8.3形式)
フォルダ名(8.3形式)
.Drive
.ParentFolder
.IsRootFolder
.Files
.SubFolders
Drive オブジェクト
親フォルダ(Folder オブジェクト)
作成日時(取得のみ)
更新日時(取得のみ)
アクセス日時(取得のみ)
)のコレクション
Folder オブジェクトは、FileSystemObject::GetFolder で、取得できます。
取得
フォルダが削除されると、Folder オブジェクトのメンバーにはアクセスできなくなります。
Set g_fs = CreateObject("Scripting.FileSystemObject")
Set folder = g_fs.GetFolder( "C:\folder" )
←
▼
▲
.Count
For Each i In Folder::Files
フォルダの中のファイルの数。サブフォルダの中は除く
File オブジェクトを参照する
をループする
Function Folder::Files.Item( FileName as string ) as File
FileName で指定したファイル名に一致するファイルオブジェクトを返します。
注意: FileName に変数を指定するときは、次のように型を指定してください。
Dim fo, fname
Set fo = g_fs.GetFolder( folder_path )
fname = "1.txt"
Set f = fo.Files.Item( CStr( fname ) )
CStr
←
▼
▲
Dim Folder::SubFolders as Folders
直下のサブフォルダ。
Set folder = g_fs.GetFolder( "." )
For Each sub_folder In folder.SubFolders '// sub_folder as Folder
echo sub_folder.Name
Next
echo folder.SubFolders.Count
サンプル
folder.SubFolders(0).Name
配列番号を指定して要素にアクセスすることはできません。
←
▼
▲
や
の返り値です。
関連
TextStream は、次の関数から取得できます。
←
▼
▲
Function TextStream::Read( n as integer ) as string
テキストストリームから指定文字数だけ取り出し、ストリームポインタを進めます。
【引数】
n
取り出す文字数(*1)
テキストストリームから取り出した内容
返り値
(*1)
非 Unicode で開いたときは、2バイトからなるマルチバイト文字(漢字など)
も 1文字として数えます。バイト数ではありません。
改行文字は、0D 0A のときは2文字として数えます。
←
▼
▲
Function TextStream::ReadLine() as string
テキストストリームから1行取り出し、ストリームポインタを1行進めます。
関連
【引数】
返り値
テキストストリームから取り出した1行
31 32 33 0D 0A 34 35 0D 0A 36
ファイル(*1)
返り値
31 32 33
31 32 33
31 32 33 0A 34 35 0D 0A 36
31 32 33 0D 34 35 0D 0A 36
Len(*2)
34 35 0D 0A 36
3
34 35 0D 0A 36
3
→ 改行コード
36
31 32 33 0D 34 35
6
EOF(*3)
False
31 32 33
True
31 32 33 0D 0A
False
False
True
31 32 33
31 32 33
3
3
(*1) ストリームポインタが指すデータ。灰色の部分は、次回以降の
ReadLine で読む値
(*2) Len( 返り値 ) の値
(*3) ReadLine 実行後の TextStream::AtEndOfStream の返り値
改行コードの違いによる動き
0D(vbCR), 0A(vbLF) と、0A は、1回の ReadLine で取れる区切りになります。
0D は、改行文字として返り値の中に入ります。Echo すると改行されます。
改行文字かどうかは、ウォッチで asc(mid( line, 1 )) と入力して表示される
文字コードから判別できます。
返り値に、改行文字は含まれません。
1行が 2MB 以上であっても取得できます。
Shell:Exec で起動したプログラムから出力される標準出力ストリームに改行
コードがないときは、本関数の中で待ち状態に入ります。
プログラムが終了したら、待ち状態から抜けます。
バイナリファイル
2種類の改行文字(0D,0A と 0A) が区別できないので、バイナリデータを
完全に取得することはできません。
TextStream::ReadAll は、完全にバイナリデータを取得できます。