- - PR -
VBSであるフォルダの以下特定のファイルを全て参照する方法
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-11-09 16:01
platiniさんご回答ありがとうございます。投稿が入れ違ったようで返信が遅れておりました。申し訳ございません。
参考HPを見まして作成してみました 'ファイルオブジェクトを作成 Set Lo_objFileSys = CreateObject("Scripting.FileSystemObject") 'フォルダ内の名前取得 Set Lo_objFileSys = Lo_objFileSys.GetFolder("C:\DelFile") ShowSubFolders(Lo_objFileSys) 'サブプロシージャーで再帰使用? Sub ShowSubFolders(Folder) Lt_Msg="ファイルが存在しません。" Sp_Log( Lt_Msg ) '取得したフォルダーのサブフォルダーを検索 For Each objWK_T in Folder.SubFolders 'ファイルシステムオブジェクトの作成 Set Lo_objFileSys_File = CreateObject("Scripting.FileSystemObject") 'フォルダ内の名前取得 Set Lo_objFile_File = Lo_objFileSys_File.GetFolder(objWK_T.Path) 'ファイル名を全部回す For Each objTT in Lo_objFile_File.Files 'ファイル名に"db"があるかないかをチェック If InStr(objTT.Path,".db") > 0 then 'ファイルの削除を行います Lo_objFile_File.DeleteFile objTT.Path Else End If Next 'オブジェクトの開放 Set Lo_objFileSys_File = Nothing Set Lo_objFile_File = Nothing '???? Wscript.Echo objWK_T.Path '再帰呼び出し? ShowSubFolders(objWK_T) Next End Sub と作成してみたのですがうまく動作はしません・・・ 色々試行錯誤中でございます。何かご教授いただければ幸いです。 宜しくお願い致します。 かずくんさんご回答ありがとうございます。 VBSでの作成が今回初めてで今日中に作成しなければならないので・・・ すみませんだいぶ焦っている状態です・・・ 完成後参考HPを読みもう一度勉強しなおしたいと思っております | ||||||||||||||||
|
投稿日時: 2006-11-09 16:05
ファイル名自体に 「.txt」 が含まれた場合も、削除対象になりますが良いのでしょうか? それと、拡張子が 「.TxT」 だった場合の考慮がなされていないようですね。 (拡張子が、小文字ばかりとは限りません)
とは、何でしょうか?
何故、ここで無意味にインスタンスを再取得しているのでしょうか?
再帰呼び出しする場所は、ディレクトリを列挙している箇所です。 当たり前ですが、再帰呼び出しをするのであれば、関数化しなければなりません。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||
|
投稿日時: 2006-11-09 16:22
じゃんぬねっとさんご回答ありがとうございます。
>ファイル名自体に 「.txt」 が含まれた場合も、削除対象になりますが良いのでしょうか? それと、拡張子が 「.TxT」 だった場合の考慮がなされていないようですね。 (拡張子が、小文字ばかりとは限りません) こちらは今回小文字のみの指定で大丈夫との事でしたので固定です。 >Sp_Log(objWK_T.Path) これはログファイルを出力するもので・・・関数では関係ないものです 消し忘れていました。申し訳ございません。 >Set Lo_objFile = CreateObject("Scripting.FileSystemObject") フォルダ用とファイル用でオブジェクトを分けなければならないと思っておりました。 >再帰呼び出しする場所は、ディレクトリを列挙している箇所です。 当たり前ですが、再帰呼び出しをするのであれば、関数化しなければなりません。 すみません・・・今日初めてやったばかりで右も左も分からない状況です・・・ さきほど書いたソースで関数化もしたつもりでした。 もう一度見直します | ||||||||||||||||
|
投稿日時: 2006-11-09 16:35
UCase 関数で合わせるだけで万全なのですから、わざわざ固定しなくても良いと思います。 > ファイル名自体に 「.txt」 が含まれた場合も、削除対象になりますが良いのでしょうか? についてはスルーされているようですが、大丈夫なのでしょうか? これも、せっかく FileSystemObject を使っているのですから、 GetExtensionName メソッドで、簡潔な実装をしましょう。
関数の中身だけ掲載されても、再帰呼び出ししているかどうか、第三者には判断できないと思いませんか? (関数名と引数リストがわからないわけですから) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||
|
投稿日時: 2006-11-09 16:40
ご回答ありがとうございます。
じゃんぬねっとさんのご教授をもとに少し変更したものを作成してみました。 'ファイルオブジェクトを作成 Set Lo_objFileSys = CreateObject("Scripting.FileSystemObject") 'フォルダ内の名前取得 Set Lo_objFileSys = Lo_objFileSys.GetFolder("C:\DelFile") '取得したフォルダーのサブフォルダーを検索 For Each objWK_T in Lo_objFileSys.SubFolders ShowSubFolders(objWK_T) Next ///////////////サブプロシージャー/////////////////////// Sub ShowSubFolders(Folder) 'ファイルシステムオブジェクトの作成 Set Lo_objFileSys_File = CreateObject("Scripting.FileSystemObject") 'フォルダ内の名前取得 Set Lo_objFile_File = Lo_objFileSys_File.GetFolder(objWK_T.Path) 'ファイル名を全部回す For Each objTT in Lo_objFile_File.Files 'Sp_Log(objWK_T.Path) 'ファイル名に"db"があるかないかをチェック If InStr(objTT.Path,".db") > 0 then 'ファイルの削除を行います Lo_objFileSys_File.DeleteFile objTT.Path Else End If Next '???? Wscript.Echo objWK_T.Path '再帰呼び出し? ShowSubF olders(objWK_T) 'オブジェクトの開放 Set Lo_objFileSys_File = Nothing Set Lo_objFile_File = Nothing End Sub .txtの部分にはすみませんまだ修正はしておりません;; 上の点でまたお気づきの点がありましたらご教授宜しくお願い致します。 | ||||||||||||||||
|
投稿日時: 2006-11-09 16:45
似たようなVBSが手元にあったのでちょっといじったものです。
(ほぼ答えです。)
| ||||||||||||||||
|
投稿日時: 2006-11-09 17:20
Blueさんご回答ありがとうございます。
掲示板を確認する前にようやくサブフォルダの中は全部削除できるという段階でした。 しかし対象フォルダ直下のファイルが削除できていない事に気づきその部分を修正しておりました。 Blueさんのソースの綺麗さとは全然及びませんが皆様のお力を借りて作成でき 良かったです。 ありがとうございました。 ただやはりお力を借りての完成ということとBlueさんのソースのきちんとまとめられた ものを見て・・・大変悔しい気持ちもありました 本日初めての言語とはいえ・・・もっと知識をつけたいです。ありがとうございました | ||||||||||||||||
|
投稿日時: 2006-11-09 17:22
即興で組んでみました。
間違いはあるかもしれません。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |