指定されたフォルダー(およびオプションでサブフォルダー)内の特定のタイプ(例: *.mp3)のすべてのファイルをコマンドラインから環境変数にカウントするにはどうすればよいですか?
(PowerShell は使用せず、バッチ コマンドのみを使用してください)
答え1
set filesCount=0 & for %f in (*) do @(set /a filesCount+=1 > nul)
答え2
フォルダとサブフォルダ内のファイルを数える
次のコマンドを使用します。
dir /b *.mp3 /s 2> nul | find "" /v /c > tmp && set /p count=<tmp && del tmp && echo %count%
環境変数には%count%
ファイルの数が含まれます。
注記:
/s
サブフォルダー内のファイルをカウントしない場合は削除します。
例 (*.txt を使用)
17 個のファイルを表示するディレクトリ リスト:
F:\test>dir /b *.txt /s
F:\test\abc.txt
F:\test\blackwhite.txt
F:\test\cpu.txt
F:\test\interface.txt
F:\test\Lorem ipsum.txt
F:\test\right.txt
F:\test\rights.txt
F:\test\software.txt
F:\test\tabs.txt
F:\test\test.txt
F:\test\this is inside junction.txt
F:\test\unique.txt
F:\test\xyz.txt
F:\test\sub\abc.txt
F:\test\sub\xyz.txt
F:\test\sub with space\junction sub with space.txt
F:\test\sub with space\xyz.txt
次のコマンドを実行します:
F:\test>dir /b *.txt /s 2> nul | find "" /v /c > tmp && set /p count=<tmp && del tmp && echo %count%
17
参考文献
- Windows CMD コマンドラインの AZ インデックス- Windows コマンド ラインに関連するあらゆることに関する優れたリファレンス。
- 探す- ファイル内のテキスト文字列を検索し、見つかったすべての行を表示します。
答え3
dir
との組み合わせを使用してfind
ファイルをカウントします。ループを介してファイルを変数に格納します。エラーを非表示にするにfor
は、エラー出力を にリダイレクトします。nul
File Not Found
@echo off
for /f %%i in ('dir *.xlsx /s /b 2^> nul ^| find "" /v /c') do set VAR=%%i
echo %VAR%
、、および/?
に使用するパラメータの説明を参照してください。dir
find
for
答え4
robocopy の (list) オプションを利用できます/L
。複雑な for ループやパイプは必要ありません。非常に高速です。
robocopy c:\mydir c:\dummy /L /E *.mp3 *.txt
c:\mydir
: 検索したいディレクトリへのパスに置き換えますc:\dummy
: これはダミー引数なのでそのままにしておくことができます。これは、/L
/L
: リストのみ、何もコピー/移動しません。/E
: サブディレクトリを再帰的に含めます。サブディレクトリを検索したくない場合は、これを削除できます。- ファイルとディレクトリのリストを印刷したくない場合は、
/NFL
(No Files List) および/または/NDL
(No Dirs List)を追加できます。
以下のようなわかりやすいレポートが表示されます。Total
列を見てください。
Source : c:\mydir
Files : *.mp3
*.txt
--------------------------------------------------
{list of all the matching files}
--------------------------------------------------
Total Copied Skipped Mismatch FAILED Extras
Dirs : 5 5 0 0 0 0
Files : 89 89 0 0 0 0
Bytes : 3.485 g 3.485 g 0 0 0 0