web-dev-qa-db-ja.com

コマンドラインからフォルダーおよびサブフォルダー内のファイルをカウントする

コマンドラインから環境変数に、指定されたフォルダー(およびオプションでサブフォルダー)内の特定の種類(* .mp3など)のすべてのファイルをカウントするにはどうすればよいですか?

(PowerShellではなく、バッチコマンドのみ)

8
ZEE
set filesCount=0 & for %f in (*) do @(set /a filesCount+=1 > nul)
2
10100111001

フォルダーとサブフォルダー内のファイルをカウントする

次のコマンドを使用します。

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

参考文献

5
DavidPostill

dirfindの組み合わせを使用して、ファイルをカウントします。 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%

dirfind、およびforについては、/?を使用するパラメーターの説明を参照してください。

1
Steven

パーティーに少し遅れましたが、私は DavidPostill のサポートを示したかっただけです

DIR [LEAVE BLANK FOR ALL FILES, *.mp3, *.*] /B /A-D /S 2>NUL | FIND "" /V /C > tmp
SET /P COUNT=<tmp
SET /A COUNT -= 1
DEL tmp
ECHO !COUNT!

これは私の実装です。私は物事を分割することを好みます(このコマンドはファイルを作成するため、1ずつ減らすのに役立ちます)。

注:上記は非表示またはシステムファイルであるファイルを含みます。
HIDDENおよびSYSTEMファイルを除外するには、代わりに[DIR ...]をこれに置き換えます

DIR [LEAVE BLANK FOR ALL FILES, *.mp3, *.*] /B /A-D-S-H /S 2>NUL | FIND "" /V /C > tmp

また、[dir ...]メソッドは[for ... VAR + = 1]メソッドよりも少なくとも1桁効率的であることに注意してください。
私のケースは510,000ファイルでした。 DIRメソッドを使用して、最大6秒; FORメソッドを使用して、最大4分。

1
JoeBro