戻る


☆ファイルやフォルダの削除
Dim MyFSO

Set MyFSO = CreateObject("Scripting.FileSystemObject")
MyFSO.DeleteFile "削除したいファイルのフルパス"
Set MyFSO = Nothing
DeleteFile, DeleteFolder どちらも可。

ファイルやフォルダのフルパスって、まさかマイコンピュータあたりから辿っていって1文字ずつ手で打とうなんて思ってませんよね。
どういうやり方がいちばん楽なのかは知りませんけど、とりあえずマウス右クリックでそのファイルなりフォルダなりのショートカット作っちゃってください。
で、今度はそのショートカットファイルに対しマウス右クリック。
プロパティにフルパスが出てきますんで、それコピーして貼り付けてください。
用が済んだらショートカットファイルは削除しちゃっていいです。
それも面倒ならこれ使ってください→GetPath.vbs
ダブルクリックすれば、このvbsファイルのある場所(ディレクトリというかフォルダというか)のフルパス文字列がクリップボードにコピーされます。
これに、何かファイルをDragDropすれば、そのファイルのフルパス文字列がコピーされます。
そのままどこにでも貼り付けられます。

ついでに。
フルパスを省略してファイル名だけ書くなんてことも可能ではあるんですが、この場合は自動的に、実行中のvbsファイルと同じ場所と解釈されます。


☆ファイルやフォルダのコピー、移動
Dim MyFSO

Set MyFSO = CreateObject("Scripting.FileSystemObject")
MyFSO.CopyFile "コピー元のフルパス", "コピー先のフルパス", True
Set MyFSO = Nothing
コピー先に同名のファイルがあった場合、上書きされて困るなら、3行目のTrueはFalseに。
CopyFile, CopyFolder どちらも可。
このCopyFileをMoveFileに書き換えれば、とうぜん処理もそれなりに(移動)

巨大ファイルのコピーでちょっと時間がかかる場合、この書き方ではちょっと不満が〜
処理中、マウスカーソルが砂時計になるわけでもなく、かすかにハードディスクがカリカリ鳴る程度。
おまえ大丈夫かと言いたくなる。
こっちの書き方のほうが精神衛生上はいいかも。
おらおら仕事してるぜ、と、派手なパフォーマンスを見せてくれる。



☆ファイルやフォルダの有無判定
Dim MyFSO
Dim MyChk

Set MyFSO = CreateObject("Scripting.FileSystemObject")
MyChk = MyFSO.FileExists("判定したいファイルのフルパス")
Set MyFSO = Nothing

If MyChk = True Then
   何か処理をさせてみたり
End If
FileExists, FolderExists どちらも可。


☆ファイルやフォルダの属性取得
Dim MyFSO
Dim MyFile
Dim MyFVal
    
Set MyFSO = CreateObject("Scripting.FileSystemObject")
Set MyFile = MyFSO.GetFile(属性を知りたいファイルのフルパス)
MyFVal = MyFile.Size
Set MyFile = Nothing
Set MyFSO = Nothing

MsgBox MyFVal, vbOKOnly, "ファイルサイズ"
Sizeのほか、DateCreated(作成年月日時刻)、DateLastModified(更新年月日時刻)なんてのもあり。
フォルダにも適用可(FileをFolderに書き換えるだけ)。


☆属性取得ついでにその応用。
適当な条件をつけてフォルダ中のファイルを片っ端から削除
Dim MyFSO
Dim MyFolder
Dim MyALLFiles, MyFile
    
Set MyFSO = CreateObject("Scripting.FileSystemObject")
Set MyFolder = MyFSO.GetFolder("フォルダのフルパス")
Set MyALLFiles = MyFolder.Files
For Each MyFile In MyALLFiles
    If Right(MyFile.Name, 4) = ".jpg" Then
        MyFSO.DeleteFile MyFile
    End If
Next
Set MyFile = Nothing
Set MyALLFiles = Nothing
Set MyFolder = Nothing
Set MyFSO = Nothing
CreateObject("Scripting.FileSystemObject") とは全然関係ないけど
Right(文字列, 4)は、文字列全体から切り出した右側4文字ってこと。
If Right(MyFile.Name, 4) = ".jpg" Then 'もしファイル名の右側4文字が".jpg"なら
    MyFSO.DeleteFile MyFile 'そのファイルを削除しろ
End If
実はこれだと右側4文字が".JPG"の場合は削除しません。

大文字小文字関係なしに削除したいなら、ちょっと書き換える必要あり

If LCase(Right(MyFile.Name, 4)) = ".jpg" Then 'もしファイル名の右側4文字を小文字化すると".jpg"になるなら
とか
If UCase(Right(MyFile.Name, 4)) = ".JPG" Then 'もしファイル名の右側4文字の大文字化すると".JPG"になるなら
とか
これなら".jpg"だろうが".jPG"だろうが".jpG"だろうが区別しないでやってくれる。

ついでにたとえば
If Right(MyFile.Name, 4) = ".jpg" Then
End If
をはずして、
For Each MyFile In MyALLFiles
    MyFSO.DeleteFile MyFile
Next
というふうにすると、それこそファイル名なんか関係なしにフォルダ中の全てのファイルを削除してくれちゃう。
この「無条件」全削除は、自分でつくったフォルダ相手にやる分にはまあいいんですけど、Windowsに初めからあったようなフォルダ相手にはやらないほうがいいです。
Windowsに初めからあるフォルダってのは、かなり重要なファイルを「隠し持っている」場合がある。
ユーザーがうっかり削除したりなんてことがないように隠してるんでしょうけど、このFor Each 〜 Next型の無条件Delete命令は、そんなものもひっくるめて削除します(Delete命令出す側からすれば、むしろ見える状態にしておいてくれたほうが気をつけるんだけど)
とにかく全部やれと命令されれば徹底的にやり抜く。
その結果なにが起こるかわかったもんじゃないんで、くれぐれも気をつけて。

この無条件全削除命令を使った感動的な実験。
適当なところに適当な名前でフォルダ新規作成して、その中にいらないファイルいくつか入れたうえ、以下のコードでvbsファイルつくって、 同じフォルダ中に入れてください。
Dim MyFSO, MyFolder, MyALLFiles, MyFile
Dim MyStrCurrDir

'最近、カレントディレクトリ(現在地)取得に CreateObject("WScript.Shell").CurrentDirectory を使うのが怖くなってきた。
'↓のほうが信用できそう。
MyStrCurrDir = Replace(WScript.ScriptFullName, WScript.ScriptName, "")
MyStrCurrDir = Left(MyStrCurrDir, Len(MyStrCurrDir) - 1)
    
Set MyFSO = CreateObject("Scripting.FileSystemObject")
Set MyFolder = MyFSO.GetFolder(MyStrCurrDir)
Set MyALLFiles = MyFolder.Files
For Each MyFile In MyALLFiles
    MyFSO.DeleteFile MyFile
Next
Set MyFile = Nothing
Set MyALLFiles = Nothing
Set MyFolder = Nothing
Set MyFSO = Nothing
で、ダブルクリック。
「自分のいるフォルダ中のファイルを全部削除しろ」という命令です。
(実験は必ず新規作成したフォルダ中で行ってください)
命令されたら何が何でもやり抜くこの頑固さ一途さ、感動的というか憎めないアホというか憎めなくてついでに愛せないバカというか、さすが機械というか薄気味悪いというか




☆フォルダの新規作成
Dim MyFSO

Set MyFSO = CreateObject("Scripting.FileSystemObject")
MyFSO.CreateFolder("つくりたいフォルダのフルパス")
Set MyFSO = Nothing
CreateFileはダメ。


☆テキストファイルの新規作成
Dim MyFSO
Dim MyTXTFILE

Set MyFSO = CreateObject("Scripting.FileSystemObject")
    Set MyTXTFILE = MyFSO.CreateTextFile("つくりたいファイルのフルパス", True)
    MyTXTFILE.WriteLine "1行目"
    MyTXTFILE.WriteLine "2行目"
    MyTXTFILE.WriteLine "3行目"
    MyTXTFILE.Write "4行目"
    MyTXTFILE.Write "まだ4行目"
    MyTXTFILE.Close '←これ書くの忘れないでね
    Set MyTXTFILE = Nothing
Set MyFSO = Nothing
WriteLineとWriteの違いってのは大体想像がつくとおり、改行の有無


☆既存テキストファイルへの書き込み
Dim MyFSO
Dim MyTXTFILE

Set MyFSO = CreateObject("Scripting.FileSystemObject")
    Set MyTXTFILE = MyFSO.OpenTextFile("既存テキストファイルのフルパス", 2か8 どっちかの数字)
    MyTXTFILE.WriteLine "abc"
    MyTXTFILE.WriteLine "de"
    MyTXTFILE.Write "fghi"
    MyTXTFILE.Close
    Set MyTXTFILE = Nothing
Set MyFSO = Nothing
開いたテキストファイルにはすでに何か文字が入っていた、として
アタマから書き込むなら 2
追加で書き込むなら 8


☆既存テキストファイルの読み込み
Dim MyFSO
Dim MyTXTFILE
Dim MyStr

Set MyFSO = CreateObject("Scripting.FileSystemObject")
    Set MyTXTFILE = MyFSO.OpenTextFile("既存テキストファイルのフルパス", 1)
    MyStr = MyTXTFILE.ReadAll
    MyTXTFILE.Close
    Set MyTXTFILE = Nothing
Set MyFSO = Nothing

MsgBox MyStr
あんまりデカいファイルで実験しないほうがいいです。


テキストファイルってのは、一般的にメモ帳で開かれることが多い hoge.txt 以外にも何種類かありまして。
今ここであつかっているvbsファイルなんてのもテキストファイルです。
だから↓みたいなコードも余裕でOKだったりする(こんなことやるバカいるのか?)
Option Explicit

Dim MyFSO
Dim MyTXTFILE

Set MyFSO = CreateObject("Scripting.FileSystemObject")
    Set MyTXTFILE = MyFSO.CreateTextFile("test.vbs", True)
    MyTXTFILE.WriteLine "Dim MyFSO"
    MyTXTFILE.WriteLine "Dim MyTXTFILE"
    MyTXTFILE.WriteLine "Set MyFSO = CreateObject(" & """Scripting.FileSystemObject""" & ")"
    MyTXTFILE.WriteLine "Set MyTXTFILE = MyFSO.CreateTextFile(" & """testtxt.txt""" & ", True)"
    MyTXTFILE.WriteLine "MyTXTFILE.WriteLine " & """1行目"""
    MyTXTFILE.WriteLine "MyTXTFILE.WriteLine " & """2行目"""
    MyTXTFILE.WriteLine "MyTXTFILE.WriteLine " & """3行目"""
    MyTXTFILE.WriteLine "MyTXTFILE.Close"
    MyTXTFILE.WriteLine "Set MyTXTFILE = Nothing"
    MyTXTFILE.WriteLine "Set MyFSO = Nothing"
    MyTXTFILE.Close
    Set MyTXTFILE = Nothing
Set MyFSO = Nothing


htmlファイルもテキスト。
ちょっと苦しいけど↓みたいなコードもあり(これは実際に自分で使ってる。「ホームページつくるソフト」で。Delphi用に書き方は変えてるけど)
Option Explicit

Dim MyFSO
Dim MyTXTFILE

Set MyFSO = CreateObject("Scripting.FileSystemObject")
    Set MyTXTFILE = MyFSO.CreateTextFile("test.htm", True)
    MyTXTFILE.WriteLine "<" & "html" & ">"
    MyTXTFILE.WriteLine "<" & "head" & ">"
    MyTXTFILE.WriteLine "<" & "meta http-equiv=" & """Content-Type""" & " content=" & """text/html; charset=shift_jis""" & ">"
    MyTXTFILE.WriteLine "<" & "META name=" & """robots""" & " content=" & """all""" & ">"
    MyTXTFILE.WriteLine "<" & "title" & ">"
    MyTXTFILE.WriteLine "無題"
    MyTXTFILE.WriteLine "<" & "/title" & ">"
    MyTXTFILE.WriteLine "<" & "/head" & ">"
    MyTXTFILE.WriteLine "<" & "body" & ">"
    MyTXTFILE.WriteLine "<" & "a href=" & """http://www.google.co.jp/""" & ">" & "戻る" & "<" & "/a" & ">" & "<" & "br" & ">"
    MyTXTFILE.WriteLine "<" & "/body" & ">"
    MyTXTFILE.WriteLine "<" & "/html" & ">"
    MyTXTFILE.Close
    Set MyTXTFILE = Nothing
Set MyFSO = Nothing