スナックelve 本店

バツイチ40代女の日記です

フォルダごとのファイルを数えたい年頃ってあるだろ?

ディレクトリかフォルダか・・・そんな小さな事は気にしてはいけない。

え、そのためにわざわざエクセル使うの? コマンドでよくね? って人は詳しく教えてください(汗)
dirとfindとかを使うらしいところまでは分かったのだがイマイチ。パイプでコマンドくっつけるの苦手。


f:id:elve:20180420211806p:plain
こんな感じのシート作って。格子罫線は列選択でおなしゃーっす。

'
'#####入り口のマクロ
'
Sub CountFile()
'表のクリア
Range("B2").CurrentRegion.Offset(2, 0).Delete (xlShiftUp)
Range("B2").Select
'パスの取得
myPath = Range("B2").Value
'再帰処理
Call CountFolder(myPath)
MsgBox ("終了")
End Sub
'
'#####サブフォルダの中でぐるぐるする部分
'
Sub CountFolder(myPath)
Dim fso As Object
Dim fl As Object
'FSOオブジェクトを作る
Set fso = CreateObject("scripting.FileSystemObject")
'今のパスにあるファイルの数
ActiveCell.Offset(0, 1) = fso.getfolder(myPath).Files.Count
'フォルダの数だけループ
For Each fl In fso.getfolder(myPath).SubFolders
    '出力を1行下に
    ActiveCell.Offset(1, 0).Select
    'サブフォルダのパスを出力
    'ハイパーリンクを張る
    ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=fl.Path, _
    TextToDisplay:=fl.Path

    'そのサブフォルダについて自身を呼ぶ
    Call CountFolder(fl.Path)
Next
End Sub

こんな感じのマクロ書いてボタンにCountFileを登録。

ぽちっとな*1
f:id:elve:20180420213601p:plain
(10)がその順番になったのは予想外(;´Д`)
パスに空白が入ってなければリンクが張れてるはず。

この辺参考
www.relief.jp

コマンドプロンプトのあれ

MS-DOS世代なのですが・・・その・・・バッチ処理苦手で・・・。
メモ帳かなんかで

cd c:\test
dir /s /a-d | findstr "ファイル ディレクトリ"
cmd /k

って書いてtest.batって名前で保存して実行

すると

c:\test>dir /s /a-d   | findstr "ファイル ディレクトリ"
 c:\test\test(1) - コピー のディレクトリ
               1 個のファイル                   0 バイト
 c:\test\test(10) - コピー のディレクトリ
              10 個のファイル                   0 バイト
 c:\test\test(10) - コピー\test(1) - コピー のディレクトリ
               1 個のファイル                   0 バイト
 c:\test\test(10) - コピー\test(2) - コピー のディレクトリ
               2 個のファイル                   0 バイト
 c:\test\test(10) - コピー\test(3) - コピー のディレクトリ
               3 個のファイル                   0 バイト
 c:\test\test(10) - コピー\test(4) - コピー のディレクトリ
               4 個のファイル                   0 バイト
 c:\test\test(10) - コピー\test(5) - コピー のディレクトリ
               5 個のファイル                   0 バイト
 c:\test\test(10) - コピー\test(6) - コピー のディレクトリ
               6 個のファイル                   0 バイト
 c:\test\test(10) - コピー\test(7) - コピー のディレクトリ
               7 個のファイル                   0 バイト
 c:\test\test(10) - コピー\test(8) - コピー のディレクトリ
               8 個のファイル                   0 バイト
 c:\test\test(10) - コピー\test(9) - コピー のディレクトリ
               9 個のファイル                   0 バイト
 c:\test\test(2) - コピー のディレクトリ
               2 個のファイル                   0 バイト
 c:\test\test(3) - コピー のディレクトリ
               3 個のファイル                   0 バイト
 c:\test\test(4) - コピー のディレクトリ
               4 個のファイル                   0 バイト
 c:\test\test(5) - コピー のディレクトリ
               5 個のファイル                   0 バイト
 c:\test\test(6) - コピー のディレクトリ
               6 個のファイル                   0 バイト
 c:\test\test(7) - コピー のディレクトリ
               7 個のファイル                   0 バイト
 c:\test\test(8) - コピー のディレクトリ
               8 個のファイル                   0 バイト
 c:\test\test(9) - コピー のディレクトリ
               9 個のファイル                   0 バイト
     ファイルの総数:
             100 個のファイル                   0 バイト
               0 個のディレクトリ  348,058,001,408 バイトの空き領域

って近いものが得られるのは分かったんだけど何でなのかがよく分からない(;´Д`)
もうチョット見やすくしたいのはどうすればいいのかチンプンカンプン(;´Д`)

参考にしたのはコチラ
garfie.weblogs.jp

*1:アクセス権のないフォルダとか含まれてるとエラーで止まるっす