- ベストアンサー
VBScriptフォルダ以下からファイルの検索、コピー方法
- VBScriptで特定のフォルダ(C:\AAA\)以下からファイル(*.txt)を検索し、コピーする方法について教えてください。
- サブフォルダがたくさんある場合のファイル検索方法がわかりません。どのようにすれば解決できますか?
- また、最新のタイムスタンプのファイル以外を別フォルダにコピーする方法も教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
フォルダ以下からファイルの検索をするにはサブフォルダについて再帰処理をする方法があります。例えば下のコードのように。 コピーは考慮すべきことが多いと思います。最新のタイムスタンプを知るにはファイル名ごとに(?)記憶する必要があります。また別フォルダは一つのフォルダにするか、コピー元と同じ構造にするか、ファイル名が重複したらどうするか、容量不足になったらどうするか、など。 VBScriptでgoogleすればたくさんサイトが出てきますね。MSのページは基本です。 http://www.microsoft.com/japan/msdn/scripting/ http://www.microsoft.com/japan/technet/scriptcenter/default.mspx ----- Set FSO = CreateObject("Scripting.FileSystemObject") ShowSubfolders FSO.GetFolder("C:\AAA") Sub ShowSubFolders(Folder) For Each File in Folder.Files 'Foler内のファイルを列挙する Fname = File.name If LCase(FSO.GetExtensionName(Fname))="txt" Then '拡張子txtを判定 WScript.Echo Folder & "\" & Fname End If Next For Each Subfolder in Folder.SubFolders 'Foler内のフォルダを列挙する ShowSubFolders Subfolder '再帰呼び出し Next End Sub -----
その他の回答 (1)
- SHIMAPEE
- ベストアンサー率75% (154/203)
ANo.1のお礼の回答です。 >拡張子txtでは >なくプレフィックスで検索する場合も同じように"txt"のところに >プレフィックス名を指定すればよいのでしょうか? ANo.1のコードではFnameにファイル名が求まっていて、文字列を扱う様々な方法で判定できます。ドキュメントをご覧になり、やってみて下さい。 固定のプレフィックスだけでしたらLeft関数を使うとよいでしょう。 If LCase(Left(Fname,3))="goo" Then 'プレフィックスgooを判定 正規表現を使えばもっと柔軟にできます。
お礼
返信遅くなりまして申し訳ございません。 もう少しドキュメントを見ながら調べてやってみたいと思います。 大変、参考になりました。 ありがとうございました。
お礼
わかりにくい質問に対して、わざわざソースコードまで書いて頂いてありがとうございます。 大変、参考になります。 >コピーは考慮すべきことが多いと思います。最新のタイムスタンプを知るにはファイル名ごとに(?)記憶する必要があります。また別フォルダは一つのフォルダにするか、コピー元と同じ構造にするか、ファイル名が重複したらどうするか、容量不足になったらどうするか、など。 そうですよね。コピーに関してもう少し調べて考えてみたいと思います。 別フォルダに関しては元々あるフォルダの下にコピー元と同じ構造に しようと思っています。ファイル名の重複、容量不足については考えて いませんでした。 すいません、もう1つお尋ねしたいことがあるのですが、拡張子txtでは なくプレフィックスで検索する場合も同じように"txt"のところに プレフィックス名を指定すればよいのでしょうか?