我正在寻找一个批处理或任何类型的脚本(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