从命令行计算文件夹和子文件夹中具有特定扩展名(.mp4)的文件数量

从命令行计算文件夹和子文件夹中具有特定扩展名(.mp4)的文件数量

我正在寻找一个批处理或任何类型的脚本(CMD / POWERSHELL),可以使用指令计算文件夹和子文件夹中的文件数量。

我的文件结构是:

C:\Users\XXX\Desktop\TASK\YEAR-MONTH\TaskID\MP4

我需要统计每个MP4文件夹中的文件数量。我尝试了几个我能找到的脚本,但都无济于事,因为它统计了.mp4每个子文件夹中的所有文件,而这并不是我想要的数字。

我当前使用的脚本:

dir /b *.mp4 /s 2> nul | find "" /v /c > tmp && set /p count=<tmp && del tmp && echo Videos Found: %count%

应将批处理文件放入 YEAR-MONTH 文件夹中,并计算 TaskID 文件夹内的 MP4 子文件夹中的所有内容。

注意:有 100 多个 TASKID(实际task id是的真实情况task id: 3130)结构(3130/mp4/)<-我需要计算.mp4每个任务文件夹内的此子文件夹中的文件数量。

我知道这太复杂了,如果有人能做到这一点我会很高兴!

问候。

答案1

这将收集脚本所在目录的子目录中的所有 mp4 文件...然后过滤掉不在名为“mp4”的子目录中的文件。

自动$PSScriptRoot变量是脚本启动的目录。将其放入您想要工作的目录中,它将按照您描述的执行...获取脚本所在目录的 mp4 子目录中 mp4 文件的文件数。

如果您希望能够从任何位置运行脚本并为其提供目标目录,则需要为此设置一个参数。[咧嘴笑]

$Filter = '*.mp4'
$StartInDir = $PSScriptRoot
$TargetSubDir = 'mp4'

$MP4_FileCount = @(Get-ChildItem -LiteralPath $StartInDir -Filter $Filter -File -Recurse |
    Where-Object {
        $_.Directory.Name -eq $TargetSubDir
        }).Count

$MP4_FileCount

pause

答案2

单行 PowewrShell 脚本:

"Videos found: {0}" -f (Get-ChildItem -Path $Env:USERPROFILE\Desktop\TASK\YEAR-MONTH\TaskID\MP4 -Filter *.mp4 -File -Recurse).Count

批处理文件中处理其他命令输出的正确方法是
包装for /f而不使用 tmp 文件。

@Echo off
For /f %%C in ('
dir /b /s "%USERPROFILE%\Desktop\TASK\YEAR-MONTH\TaskID\MP4\*.mp4" 2^>nul ^|find "" /v /c
') Do Echo Videos found: %%C

答案3

(Get-ChildItem -Filter *.yaml -File -Recurse).Count
(Get-ChildItem -Filter *.yml -File -Recurse).Count

相关内容