ログファイルの記録や、フォルダクリーンナップ操作、一時的ファイル処理など、
フォルダ内にファイルが存在していないか判定したいケースがあります。
あるいは、データ管理のためにフォルダ内のファイル個数を調べたいことがあります。
今回はWindowsバッチで、フォルダ内のファイル存在判定と、ファイルやフォルダ個数をカウントする方法をご紹介します。
フォルダ内のファイル個数の確認
ファイルの存在判定とファイル個数の確認はオーバーラップする部分があります。
個数が0だったら空、といった感じです。
そこで、まずはファイル個数の判定をしたいと思います。
想定シーンを先にご説明します。
count_files_in_folder.bat
folder1
|─text1.txt
|─text2.txt
└─text3.txt
folder2
|─text1.txt
└─text2.txt
folder3
└─text1.txt
バッチファイルと同じディレクトリに、3つのフォルダがあります。
それぞれのフォルダ下にはテキストファイルが入っています。
このシーンで、count_files_in_folder.bat
を作成してコピペします。
@echo off
setlocal enabledelayedexpansion
set "root_folder=."
for /d %%F in ("%root_folder%\*") do (
set "folder=%%F"
set "count=0"
for %%A in ("!folder!\*") do (
set /a count+=1
)
echo Files in !folder!: !count!
)
pause
count_files_in_folder.bat
をダブルクリックで実行してみましょう。
フォルダにはそれぞれ3個、2個、1個のテキストファイルが入っています。
このようになります。
無事に、それぞれのフォルダ内のファイル数を調べることができました。
同じディレクトリ内のフォルダ個数の確認
次はフォルダの個数を数えてみます。
このようなディレクトリ構成で、同じディレクトリ内のフォルダの数をカウントします。
ダミーでファイルも置いてみます。
ファイルを数えずに、3つのフォルダだけを数えられればOKです。
count_folders.bat
folder1
|─text1.txt
|─text2.txt
└─text3.txt
folder2
|─text1.txt
└─text2.txt
folder3
└─text1.txt
dummy1.txt
dummy2.txt
count_folders.bat
を作成して、次をコピペします。
@echo off
setlocal enabledelayedexpansion
set "root_folder=."
set "folder_count=0"
for /d %%F in ("%root_folder%\*") do (
set "folder=%%F"
set "count=0"
set /a folder_count+=1
)
echo Total folders: %folder_count%
pause
実行結果がこちらです。
無事に、ダミーファイルを無視して、フォルダの数をカウントできました。
フォルダ内のサブフォルダ個数の確認
先ほどのフォルダ個数の判定を、サブフォルダを対象にしてみましょう。
ファイル個数の判定に加えてサブフォルダ個数を数えます。
count_file_subfolder.bat
folder1
|─subfolder1
|─text1.txt
|─text2.txt
└─text3.txt
folder2
|─subfolder1
|─subfolder2
|─subfolder3
|─text1.txt
└─text2.txt
folder3
|─subfolder1
|─subfolder2
└─text1.txt
dummy1.txt
dummy2.txt
ちょっとずらっと並んで分かりにくくなってきました。
folder1の中に1つのサブフォルダ、3つのファイル。
folder2の中に3つのサブフォルダ、2つのファイル。
folder3の中に2つのサブフォルダ、1つのファイル。
これらを検出したいと思います。
count_file_subfolder.bat
を作成して次をコピペします。
@echo off
setlocal enabledelayedexpansion
set "root_folder=%~dp0"
for /d %%F in ("%root_folder%\*") do (
set "folder=%%F"
set "file_count=0"
set "subfolder_count=0"
for %%A in ("!folder!\*") do (
set /a file_count+=1
)
for /d %%A in ("!folder!\*") do (
set /a subfolder_count+=1
)
echo Folder: !folder!
echo Files: !file_count!
echo Subfolders: !subfolder_count!
echo.
)
pause
これまでの合体になっています。
ファイルの個数カウントに、先ほどのフォルダ個数カウントを追加しています。
ただし、フォルダ個数のカウント対象を、サブフォルダに変えています。
実行するとこのようになります。
無事に、それぞれのフォルダの中にあるファイルとサブフォルダの数をカウントすることができました。
フォルダの空判定
最後に、フォルダの空判定をやってみましょう。
これまでのファイルの個数判定、フォルダの個数判定を合体させます。
ファイル、サブフォルダともに0個であることを判定すれば、フォルダ空かどうか判定できます。
先ほどの例の構成を再利用してみます。
folder1だけ空に変えました。果たして見つけられるでしょうか?
find_empty.bat
folder1
folder2
|─subfolder1
|─subfolder2
|─subfolder3
|─text1.txt
└─text2.txt
folder3
|─subfolder1
|─subfolder2
└─text1.txt
dummy1.txt
dummy2.txt
これまでのスクリプトで個数のカウントができています。
今回は個数のカウントは無しにしてみます。
ファイル個数が0、かつフォルダ個数が0の場合に、空メッセージを出すようにします。
find_empty.bat
を作成し、次をコピペします。
@echo off
setlocal enabledelayedexpansion
set "root_folder=%~dp0"
for /d %%F in ("%root_folder%\*") do (
set "folder=%%F"
set "file_count=0"
set "subfolder_count=0"
for %%A in ("!folder!\*") do (
if exist "%%A" (set /a file_count+=1)
)
for /d %%A in ("!folder!\*") do (
set /a subfolder_count+=1
)
rem echo Folder: !folder!
rem echo Files: !file_count!
rem echo Subfolders: !subfolder_count!
if !file_count! equ 0 (
if !subfolder_count! equ 0 (
echo Empty folder detected: !folder!
)
)
echo.
)
pause
実行結果がこちらです。
無事にfolder1が空であることを判定できました。
ちなみに空フォルダが見つからない場合はレスポンス無しになります。
用途に合わせてご修正ください。
例えばこんな感じです。(if判定のみ抜粋)
set /a total_count=file_count+subfolder_count
if !total_count! equ 0 (
echo Empty folder detected: !folder!
) else (
echo Non-empty folder detected: !folder!
)
実行するとこのようになります。
明示的に空でなかったことを示したい場合に、有用と思います。
ということで、
今回はWindowsバッチ(bat)でフォルダの空判定・ファイルやフォルダ個数をカウントする方法をご紹介しました。
ファイル個数やフォルダ個数を把握することで、データや資料の管理が容易になります。
例えば、フォルダだらけファイルだらけになっていれば、小分けに整理したり、圧縮が必要と気づけます。
ごちゃごちゃしていると大事な資料が見つからない、というのはあるあるですね。
不要な空フォルダが見つけられれば、不要フォルダとして削除することもできます。
バックアップ作業をしていれば、対象から外すこともできます。
今回紹介した方法が活用できるかもしれません。
試してみてはいかがでしょうか。
今回は以上となります。
本記事が少しでもお役に立てれば幸いです。
それでは、読んで頂きありがとうございました!