• ベストアンサー

ツールを探しています。指定フォルダ配下のサイズ・ファイル数

Win2000です。 指定フォルダ配下のファイル数とサイズをテキストベースで一度に返すようなコンソール系のフリーソフトで、 良いものがあれば教えてください。 GUI形式のものはたくさんあるのですが、バッチ処理などから呼び出して、結果だけをレポートする目的で、 テキストベースで応答を返してくれるものを探しています。 →もし自作する場合など、VC等で目的に適した関数(ないしは、自作支援HPなど)があれば教えてください。 検索サイト等で、ありそうで、なかなか見つけられません。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

#3>集計結果は、一度に、 なるほど、勘違いしていましたすみません。 以下修正してみました。 ---------------------------------------------------------------- '指定したフォルダのサブフォルダを含めたファイル件数とサイズを表示する 'cscript //nologo GetFsize.vbs FOLDER Dim fso, wsho, folderList, folder Dim i, count Set fso = WScript.CreateObject("Scripting.FileSystemObject") Set wsho = WScript.CreateObject("WScript.Shell") Set folderList =WScript.Arguments count=0 for i=0 to folderList.length-1 Set folder = fso.GetFolder(folderList(i)) count = count + auxProc(folder.Path) next WScript.Echo(folder.Path & " " & count & " files " & folder.Size & "Bytes") function auxProc(folderPath) Dim folder, x, folderName, count Set folder = fso.GetFolder(folderPath) count = folder.Files.Count For Each x in folder.SubFolders 'サブフォルダの処理 count = count + auxProc(x.Path) next auxProc = count End function ---------------------------------------------------------------- >auxProc(folder.Path)の戻り値等で、ファイル数、サイズ(の2つ)を返して… フォルダのサイズ自体は、ルートだけでいいので、(ルートのサイズはサブフォルダを含んだサイズなので)、ファイル数を返せば良いです。 >処理速度的に、VBScriptを使っても、(VC等で作成することに比べ)遅いということは無いでしょうか。 例え、VCを使ったとしても、こうしたディスクアクセスがほとんどの処理は大して変わらないと思います。 内容的にも大したことはやっていないので、API呼び出しが動作のほとんどを占めると思いますが、それがAPIの直接呼び出しか間接呼び出しかくらいの違いだと思うので、ディスクアクセスに比べれば大した違いにはならないと思います。

supob
質問者

お礼

お礼が遅くなりました。 先ほど、動作確認をしました。 D:\test 68837 files 5051663083Bytes を数十秒で回答してきました。 また、GUIにて該当フォルダを右クリックしてプロパティで求めた結果と比較して、 ファイル数、サイズともに一致することが確認できました。 処理速度的にもほとんど変わりませんでした。 (キャッシュされていたのか、後から実行した方が体感的に速かったですが、 あらためて上記VBSを走らせたら、更に速く数秒で答えを返してきましたので、問題なしと思っています) やりたかったことがこんなに簡単にできて、大変うれしいです。 私のほうでも、#3でのご回答との違いなどをこれから勉強したいと思います。 以上、懇切に何度もありがとうございました。

supob
質問者

補足

引数で複数フォルダが指定できるようなことも考慮されているようだ、と気がつきましたので、部分的にちょっと変えてみました。 'cscript //nologo GetFsize.vbs FOLDER1 [FOLDER2]... Dim fso, wsho, folderList, folder Dim i, count, file, size     : file = 0 size = 0 for i=0 to folderList.length-1 count=0 Set folder = fso.GetFolder(folderList(i)) count = count + auxProc(folder.Path) WScript.Echo(folder.Path & " " & count & " files " & folder.Size & " Bytes") file = file + count size = size + folder.Size next WScript.Echo("Total " & file & " files " & size & " Bytes")     : そうすると、こんな感じにできました。 D:\>cscript //nologo GetFsize.vbs D:\test D:\Becky D:\test 68836 files 5051662329 Bytes D:\Becky 9899 files 2194430933 Bytes Total 78735 files 7246093262 Bytes

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

VBScript でできます。 以下のスクリプトを適当な名前(FolderSizeR.vbs)で保存して実行(方法はサンプルに書いてある)します。 サイズはディスク上のサイズでなく実際のファイルサイズ。 ---------------------------------------------------------------- '指定したフォルダのファイル件数とサイズを表示する 'サブフォルダを検索対象に含める '起動方法 'cscript //nologo FolderSizeR.vbs フォルダの指定 '例:カレントフォルダ以下のフォルダを処理する 'cscript //nologo FolderSizeR.vbs . Dim fso, wsho, folderList, folder 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)) auxProc(folder.Path) next function auxProc(folderPath) Dim folder, x, folderName Set folder = fso.GetFolder(folderPath) WScript.Echo(folder.Path & " ファイル数:" & folder.Files.Count & ",サイズ:" & folder.Size) For Each x in folder.SubFolders 'サブフォルダの処理 auxProc(x.Path) next end function

supob
質問者

補足

ありがとうございました。 #2の方への返信にも書きましたが、集計結果は、一度に、 C:\Temp> GetFsize D:\Data\work D:\Data\work 21,023 files 6,320 MB のように表示させて終わるような動作を求めていました。 示して頂いた例のスクリプトでは、 auxProc(folder.Path)の戻り値等で、ファイル数、サイズ(の2つ)を返して、それをforループ内で集計した後に、WScript.Echoで表示。 のように改造すれば良いでしょうか・・・ あと、処理速度的に、VBScriptを使っても、(VC等で作成することに比べ)遅いということは無いでしょうか。

すると、全ての回答が全文表示されます。
回答No.2

手元にあるExcelVBAの「できる大辞典(ISBN4-8443-1888-8)」を見ていますが、 P496 Sub ファイル情報取得() Dim myFSO As New FileSystemObject Dim myFolder As Folder Dim myFiles As Files Dim myFile As File Dim i As Integer Set myFolder = myFSO.GetFolder("C:\指定フォルダー") Set myFiles = myFolder.Files For Each myFile In myFiles i = i+1 Cells(i+2,1).Value = myFile.Name Cells(i+2,2).Value = myFile.DateCreated Cells(i+3,3).Value = myFile.Size Next End Sub このようなマクロで、ファイル名、作成日時、サイズがExcelのシート上に取得できるようです。 ご参考までに

supob
質問者

お礼

ありがとうございました。エクセルマクロの例として参考にさせて頂きます。 質問がよくなかったのですが、 具体的には、コマンドラインから、次のようにして使うものを探していました。 (例) C:\Temp> GetFsize D:\Data\work D:\Data\work 21,023 files 6,320 MB のような感じのもの。

すると、全ての回答が全文表示されます。
  • suzukikun
  • ベストアンサー率28% (372/1325)
回答No.1

dir /s フォルダ名 > foo.txt じゃだめですか?

supob
質問者

お礼

ご回答ありがとうございました。 質問の仕方が悪くてすみません。  コマンド フォルダ名 [リターン] とすると、  "フォルダ名 ファイル数 サイズ" を表示してくれるようなツールを探していました。 教えて頂いた方法では、更に集計が必要なので、上手く行きませんでした。

すると、全ての回答が全文表示されます。

関連するQ&A