プロが教えるわが家の防犯対策術!

Win2000です。
指定フォルダ配下のファイル数とサイズをテキストベースで一度に返すようなコンソール系のフリーソフトで、
良いものがあれば教えてください。

GUI形式のものはたくさんあるのですが、バッチ処理などから呼び出して、結果だけをレポートする目的で、
テキストベースで応答を返してくれるものを探しています。

→もし自作する場合など、VC等で目的に適した関数(ないしは、自作支援HPなど)があれば教えてください。

検索サイト等で、ありそうで、なかなか見つけられません。よろしくお願いします。

A 回答 (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の直接呼び出しか間接呼び出しかくらいの違いだと思うので、ディスクアクセスに比べれば大した違いにはならないと思います。

この回答への補足

引数で複数フォルダが指定できるようなことも考慮されているようだ、と気がつきましたので、部分的にちょっと変えてみました。

'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

補足日時:2006/06/21 19:00
    • good
    • 0
この回答へのお礼

お礼が遅くなりました。
先ほど、動作確認をしました。

D:\test 68837 files 5051663083Bytes
を数十秒で回答してきました。

また、GUIにて該当フォルダを右クリックしてプロパティで求めた結果と比較して、
ファイル数、サイズともに一致することが確認できました。
処理速度的にもほとんど変わりませんでした。
(キャッシュされていたのか、後から実行した方が体感的に速かったですが、
あらためて上記VBSを走らせたら、更に速く数秒で答えを返してきましたので、問題なしと思っています)

やりたかったことがこんなに簡単にできて、大変うれしいです。

私のほうでも、#3でのご回答との違いなどをこれから勉強したいと思います。
以上、懇切に何度もありがとうございました。

お礼日時:2006/06/21 16:51

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

この回答への補足

ありがとうございました。

#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等で作成することに比べ)遅いということは無いでしょうか。

補足日時:2006/06/20 11:57
    • good
    • 0

手元にある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のシート上に取得できるようです。
ご参考までに
    • good
    • 0
この回答へのお礼

ありがとうございました。エクセルマクロの例として参考にさせて頂きます。

質問がよくなかったのですが、
具体的には、コマンドラインから、次のようにして使うものを探していました。
(例)
C:\Temp> GetFsize D:\Data\work

D:\Data\work 21,023 files 6,320 MB

のような感じのもの。

お礼日時:2006/06/20 11:55

dir /s フォルダ名 > foo.txt


じゃだめですか?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
質問の仕方が悪くてすみません。

 コマンド フォルダ名 [リターン]

とすると、

 "フォルダ名 ファイル数 サイズ"

を表示してくれるようなツールを探していました。

教えて頂いた方法では、更に集計が必要なので、上手く行きませんでした。

お礼日時:2006/06/20 11:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!