如何将命令行中指定文件夹(以及可选的子文件夹)中给定类型(例如 *.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 cmd 行相关的所有事物的绝佳参考。
- 寻找- 在文件中搜索文本字符串并显示找到该字符串的所有行。
答案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%
/?
请参阅使用for dir
、find
和 的参数描述for
。
答案4
您可以利用 robocopy 的/L
(list) 选项。这样您就不需要任何复杂的 for 循环或管道了。而且速度也非常快。
robocopy c:\mydir c:\dummy /L /E *.mp3 *.txt
c:\mydir
:将其替换为您要搜索的目录的路径c:\dummy
:你可以保留它,它只是一个虚拟参数,由于我们正在使用,所以它会被忽略/L
/L
:仅列出,不会复制/移动任何内容。/E
:递归包含子目录。如果不想搜索子目录,可以删除此项。- 如果您不想打印文件和目录列表,您可以添加
/NFL
(无文件列表)和/或/NDL
(无目录列表)
您将获得如下所示的漂亮报告。只需查看该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