Win2000です。
指定フォルダ配下のファイル数とサイズをテキストベースで一度に返すようなコンソール系のフリーソフトで、
良いものがあれば教えてください。
GUI形式のものはたくさんあるのですが、バッチ処理などから呼び出して、結果だけをレポートする目的で、
テキストベースで応答を返してくれるものを探しています。
→もし自作する場合など、VC等で目的に適した関数(ないしは、自作支援HPなど)があれば教えてください。
検索サイト等で、ありそうで、なかなか見つけられません。よろしくお願いします。
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の直接呼び出しか間接呼び出しかくらいの違いだと思うので、ディスクアクセスに比べれば大した違いにはならないと思います。
この回答への補足
引数で複数フォルダが指定できるようなことも考慮されているようだ、と気がつきましたので、部分的にちょっと変えてみました。
'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
お礼が遅くなりました。
先ほど、動作確認をしました。
D:\test 68837 files 5051663083Bytes
を数十秒で回答してきました。
また、GUIにて該当フォルダを右クリックしてプロパティで求めた結果と比較して、
ファイル数、サイズともに一致することが確認できました。
処理速度的にもほとんど変わりませんでした。
(キャッシュされていたのか、後から実行した方が体感的に速かったですが、
あらためて上記VBSを走らせたら、更に速く数秒で答えを返してきましたので、問題なしと思っています)
やりたかったことがこんなに簡単にできて、大変うれしいです。
私のほうでも、#3でのご回答との違いなどをこれから勉強したいと思います。
以上、懇切に何度もありがとうございました。
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
この回答への補足
ありがとうございました。
#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のシート上に取得できるようです。
ご参考までに
ありがとうございました。エクセルマクロの例として参考にさせて頂きます。
質問がよくなかったのですが、
具体的には、コマンドラインから、次のようにして使うものを探していました。
(例)
C:\Temp> GetFsize D:\Data\work
D:\Data\work 21,023 files 6,320 MB
のような感じのもの。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- XML エクセルのマクロについて教えてください。 3 2023/02/06 09:06
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- PDF PDFを自動添付したメールを送信してくれるツールを探しています。 2 2023/02/07 15:19
- Visual Basic(VBA) 複数ファイルのデータの統合について 12 2022/05/14 12:03
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/21 13:29
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/01/12 16:58
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/08 11:02
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/03 13:18
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/21 09:28
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Windows10でコマンドプロンプト...
-
ファイル名と同名のフォルダを...
-
EXPLORERで開いているフォルダ...
-
C ファイル出力で、フォルダが...
-
ファイル名から該当フォルダへ移動
-
VBA:特定の文字を含むフォルダ...
-
多量のファイルをフォルダに自...
-
サーバ内のフォルダ名と各フォ...
-
条件に合うフォルダが存在する...
-
パス名に2バイト文字(マルチバ...
-
カレントフォルダって?
-
Excel VBA 同じ名前のフォルダ...
-
フォームを最前面に表示したい...
-
フォルダ配下のファイル作成日...
-
Hitachi Embedded Workshop (HE...
-
vbsで選択ダイアログを表示した...
-
VS2005で"定義へ移動"ができません
-
VBA フォルダ名に特定の文字を...
-
バッチファイルで指定フォルダ...
-
フォルダ内のPDFファイル名を変...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Windows10でコマンドプロンプト...
-
パス名に2バイト文字(マルチバ...
-
ファイル名と同名のフォルダを...
-
VBA 最新のフォルダ取得
-
Excelのハイパーリンクについて...
-
デスクトップの画像をhtmlに表...
-
ディレクトリ名変更してコピー...
-
VBA フォルダ名に特定の文字を...
-
バッチファイルで指定フォルダ...
-
フォルダ内のPDFファイル名を変...
-
Access VBA で フォルダ権限...
-
excelマクロ 冒頭3文字が一致す...
-
【マクロ】ファイル名の日付に...
-
フォルダにリンクを貼りたい
-
会社のネットワーク上のファイ...
-
多量のファイルをフォルダに自...
-
C ファイル出力で、フォルダが...
-
保存先のフォルダ名を指定した...
-
vbsで選択ダイアログを表示した...
-
Excel VBA 同じ名前のフォルダ...
おすすめ情報