- ベストアンサー
ファイル名の一致数を表示してフォルダ名を修正するソフト
- フォルダ内で特定のファイル名の数を表示し、フォルダ名を修正するソフトについて質問です。
- フォルダ内の特定のファイル名の数を表示し、フォルダ名を修正するソフトを探しています。
- フォルダ内の一致するファイル名の数を表示し、フォルダ名を修正するソフトを探しています。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
>2回目で…でエラー すみませんm(_ _)m ソフトを点検した時は、うまく行っていたのですが、 なぜかアップした時に、文字が変わっていました。 >if folder.Name <> folderNmae then 'フォルダ名に変更が有った時名前を変更する の行の folderNmae を folderName に変更して下さい。 なぜか、aの位置が違っています?? >VBScriptのテキスト あんまり初心者用のラーニングテキストではないのですが、サンプルプログラムや、サンプルケースが載っている本として 『WSHクイックリファレンス』オライリージャパン/発行所、オーム社発売元(3500円+税)がでています。 あと、 参考URLから以下のドキュメントがダウンロードできます。いわゆるヘルプ形式なので良いです。 結局大元のドキュメントなので、最終的にはここを確認しないといけません。 VBScript ドキュメント Windows Script Host ドキュメント Windows スクリプト コンポーネント ドキュメント
その他の回答 (6)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
ついでに、プログラムで付けられた件数を削除するプログラムも作りました 'フォルダに付けられた件数を削除する Dim fso, wsho, folderList Dim i Set fso = WScript.CreateObject("Scripting.FileSystemObject") Set wsho = WScript.CreateObject("WScript.Shell") Set folderList =WScript.Arguments for i=0 to folderList.length-1 Set folder = fso.GetFolder(folderList(i)) call auxProc(folder.Path) next Sub auxProc(folderPath) Dim folder, x, regEx Set folder = fso.GetFolder(folderPath) For Each x in folder.SubFolders 'サブフォルダの処理 call auxProc(x.Path) next Set regEx = New RegExp ' 正規表現を作成します。 regEx.Pattern = "(-\d+)*$" ' -で始まる数字、の繰りかえし folder.Name = regEx.Replace(folder.Name, "") ' 件数を取り除く End Sub '------------------------ 蛇足 ここで、書いているプログラムは、VBAではなくて、VBScriptです。 しかし、ほんのちょっとの修正でVBAで動作するようには変更できます。
お礼
BLUEPIXYさん、何度も何度もありがとうございます。プログラムがすばらしい分、一ヶ月間ベクターでソフトを何度もダウンロードしていた自分がアホに思えてきます。 プログラムですが、動かしてみると2回目で「既に同名のファイルが存在しています」ということでエラーが表示されてしまいます。 一旦、以前の表示を消す必要があるようです。つまり「フォルダ名-○○」という形だとエラーになるので、消して「フォルダ名」の形にしてからやり直すことになります。 (回答No6のプログラムで消せるので特に問題はありませんが。) ところで、今後、教えていただいたプログラムを継続して使用していくつもりです。上記のように小さい問題がちょこちょこでてこないとも限りません。 今後は私一人だけでなく、多分うちの部署の全員が使用することになるので、あーしたいとかこーしたいというのも出てくると思います。 そこで質問なんですが、VBScriptのテキストというか、本は出ていないのでしょうか?本屋に今日寄ってきたのですが、まったく置いてませんでした。VBScriptの文字すら見当たりませんでした。JAVAとかC言語は置いていたんですが。自分で勉強しようと思うのですが、初心者向けのラーニングテキストみたいな本やサイトをご存知でしたら教えていただけないでしょうか? 週末に大きな本屋に行くつもりでいますが、今度はたくさんありすぎてどれがいいのかわからんということにもなりかねませんので、オススメの本やサイトがありましたらお願いいたします。 毎回お願いしてばかりですみません。今回で書き込みは多分最後になるかと思います。プログラムの件、本当にありがとうございました。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>前回の検索結果の数字も消せるようなプログラム やっぱりそうですよね、そうだとは思いましたf(^^; '指定した文字列を含むファイルの件数をドロップしたフォルダの名前の後に追加する '検索文字列の入力をキャンセルすると、全てのファイル選んだことになる。 'サブフォルダを検索対象に含める 'フォルダ名末尾の前回処理は削除する Dim fso, wsho, folderList, folder, ret Dim i, searchStr, count Set fso = WScript.CreateObject("Scripting.FileSystemObject") Set wsho = WScript.CreateObject("WScript.Shell") Set folderList =WScript.Arguments searchStr=InputBox("検索するファイル名に含まれる文字を入力して下さい", "検索文字列入力", "出張") for i=0 to folderList.length-1 Set folder = fso.GetFolder(folderList(i)) count = auxProc(folder.Path) ret = wsho.Popup(folder.Name & "のサブフォルダも含めた該当ファイルは、" & count & "件です", 5, "該当件数", 64) next function auxProc(folderPath) Dim folder, x, count, regEx, folderName Set folder = fso.GetFolder(folderPath) count = 0 For Each x in folder.files if instr(UCase(x.Name), UCase(searchStr)) > 0 then count = count + 1 next ' ret = wsho.Popup(folder.Name & "の該当ファイルは、" & count & "件です", 3, "該当件数", 64) For Each x in folder.SubFolders 'サブフォルダの処理 count = count + auxProc(x.Path) next Set regEx = New RegExp ' 正規表現を作成します。 regEx.Pattern = "(-\d+)*$" ' -で始まる数字、の繰りかえし folderName = regEx.Replace(folder.Name, "-" & count) ' 件数を置き換える if folder.Name <> folderNmae then 'フォルダ名に変更が有った時名前を変更する folder.Name = folderName end if auxProc = count end function
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
とりあえず、要望にあうかどうかはわからないまま、サブフォルダ対応版を作ってみました。 トップフォルダ以下そのフォルダに含まれる該当件数をフォルダ名に付けます。 サブフォルダ名は変更しないで、トップフォルダだけ件数を付けるように変更するのは、簡単です。 (名前を変更する部分を下請けからトップレベルにするだけ) '指定した文字列を含むファイルの件数をドロップしたフォルダの名前の後に追加する '検索文字列の入力をキャンセルすると、全てのファイル選んだことになる。 'サブフォルダを検索対象に含める Dim fso, wsho, folderList, folder, ret Dim i, searchStr, count Set fso = WScript.CreateObject("Scripting.FileSystemObject") Set wsho = WScript.CreateObject("WScript.Shell") Set folderList =WScript.Arguments searchStr=InputBox("検索するファイル名に含まれる文字を入力して下さい", "検索文字列入力", "出張") for i=0 to folderList.length-1 Set folder = fso.GetFolder(folderList(i)) count = auxProc(folder.Path) ret = wsho.Popup(folder.Name & "のサブフォルダも含めた該当ファイルは、" & count & "件です", 5, "該当件数", 64) next function auxProc(folderPath) Dim folder, x, count Set folder = fso.GetFolder(folderPath) count = 0 For Each x in folder.files if instr(UCase(x.Name), UCase(searchStr)) > 0 then count = count + 1 next ' ret = wsho.Popup(folder.Name & "の該当ファイルは、" & count & "件です", 3, "該当件数", 64) For Each x in folder.SubFolders 'サブフォルダの処理 count = count + auxProc(x.Path) next folder.Name=folder.Name & "-" & count auxProc = count end function
お礼
またまたありがとうございました。BLUEPIXYさんはホントにすばらしいプログラマーですね!! ところで、表示させるファイル数ですが、各々のフォルダで、サブフォルダ分も足した数量で表示させたいのです。 例えば、フォルダAに「フォルダB、ファイル1、ファイル2、ファイル出張1」と入っていて、フォルダBには「ファイル3、ファイル出張2、ファイル出張3、ファイル出張4」とある場合、 フォルダA-4、フォルダB-3 と表示させたいのですが。 また、当方でフォルダの名前に”-”をつけないようにルール化するので、-3などの前回の検索結果の数字も消せるようなプログラムになっていると非常にありがたいです。(-3-4-5-6・・・と続くとさすがにフォルダ名が見にくくなってしまいます故) お願いばかりで大変申し訳ないと思っていますが、お力添えをお願いします。 当方、VBについてはまったくのど素人です。BLUEPIXYさんが書いたプログラムの内容を把握しようと生まれて初めて「VBAラーニングテキスト~」なんて本を手に取ったくらいの素人です。上記、大変なご無理をお願いしているかもしれません(無理なのかどうかも理解できていません;;)。 無理なことをお願いしていましたら、BLUEPIXYさんもお忙しいでしょうから、無視していただいても結構です。 以上、よろしくお願いいたします。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>サブフォルダも含めて検索というの不可能でしょうか? プログラムを変更すればできますが、 サブフォルダを含めて処理するというのは、 おおきくは、2通り考えられると思います。 1)Topフォルダ群のトップフォルダ名に件数を追加する 2)Topフォルダ群のトップフォルダ名に件数を追加するのは直下のファイルだけで、サブフォルダにはサブフォルダの直下のファイルの件数を追加する 3)混合型 フォルダには、サブフォルダを含む件数と直下のファイルの件数を表示する 例:folder-11(2) -サブフォルダを含めた該当ファイル数(直下の該当ファイル数)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
追加の説明: 検索文字列の入力をキャンセルした場合は、処理をキャンセルするのでなく、全てのファイルの件数を数える(仕様)
お礼
BLUEPIXYさん、No1~No2の回答ありがとうございました。やってみようと思います。 ところで、サブフォルダも含めて検索というの不可能でしょうか?できればサブフォルダも含めたいのですが。 P.S.回答時間をみると、質問してからすぐにお返事いただいたようで、感謝感謝です!!
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
VBScriptで作ってみました。 以下の部分を切取線の前の部分までをテキストエディタで拡張子vbsで保存して下さい。 'ファイル名に指定した文字が一致する件数をフォルダに付ける Dim fso, wsho, folderList, folder Dim i, x, searchStr, count, ret Set fso = WScript.CreateObject("Scripting.FileSystemObject") Set wsho = WScript.CreateObject("WScript.Shell") Set folderList =WScript.Arguments searchStr=InputBox("検索するファイル名に含まれる文字を入力して下さい", "検索文字列入力", "出張") for i=0 to folderList.length-1 Set folder = fso.GetFolder(folderList(i)) count = 0 For Each x in folder.files if instr(UCase(x.Name), UCase(searchStr)) > 0 then count = count + 1 next ret = wsho.Popup(folder.Name & "の該当ファイルは、" & count & "件です", 5, "該当件数", 64) folder.Name=folder.Name & "-" & count next ------切り取り線------ 使い方:ディスクトップなどにショートカット(本体でもいいけど)を作って、このプログラムに処理させたいフォルダをエクスプローラからまとめてドロップすると処理を実行します。 サブフォルダは処理対象になりません。 検索する文字列のデフォルトは出張です、適宜変更してください。 該当した件数をポップアップで表示しますが、5秒で次のフォルダの処理をします。鬱陶しい場合は、時間を変更するか、行の先頭に'をつけるか、行を削除して下さい。 検索文字列は、英大文字小文字を区別しません。 区別したい場合は、UCase()を消して下さい。(カッコの中身は残す) 定期的に実行すると folder-0-12-0の様になってしまいますが、これは、まあ、しょうがないですね。実際プログラムには、最初からそういう名前なのか、プログラムが前回実行した時に付けたものなのかは判別できません。 そういう-件数が絶対に付かないなら、次回実行時に消すことも可能ではあります。
お礼
お返事ありがとうございます。 これで書き込みが最後に~とか書いておきながらそのあと質問してましたね(..ゞ。 プログラムの方ですが、直しましたら普通に動くようになりました。 また、参考文献ありがとうございます。みてみます。(WSHという本は近場の本屋でもあったと思います。ググってみてわかったのですが、WSH関連で探せばよかったみたいですね) ところで、本日、上司からこのプログラムは会社で使用しないようにと言われてしまいました・・・。理由は「誰が作ったかわからないから、ウィルスの危険性があるため」です。 なんで中身が見えてるプログラムでウィルスの危険性があんねん!!と対抗したのですが、無駄でした。 「何かあったときに困るから」ということですが、何かって何??って感じです。 昨今、確かにセキュリティ強化は叫ばれていますが、中身が見えてて、内容も分かっているプログラムのどこが危険なのか・・・。(結局上司は責任転嫁できる者がいないとイヤだということのようです) とはいうものの、こんな便利なプログラムは使わない手はないので、もう一度かけあってみるつもりです。 BLUEPIXYさん、お付き合いくださってありがとうございます。この質問はこれで閉めさせていただきます。