如果你想用cmd做,那么以下是完成它的简单方法:
set count=0 & for %x in (*) do @(set /a count+=1 >nul) echo %count%
这是假设命令行.在批处理文件中,您可以这样做
@echo off setlocal enableextensions set count=0 for %%x in (*) do set /a count+=1 echo %count% endlocal
这样可以做得更好一些.您可以批量删除> nul,因为如果从批处理文件运行,set / a将不显示结果 – 它直接从命令行执行.此外,for循环中的%符号必须加倍.
我见过很多人用find / c尝试漂亮技巧的例子.要非常小心,因为各种各样的事情可以打破这个.
常见错误:
>使用find / c / v并尝试查找从未包含在文件名中的内容,例如::.惯于.工作.可靠.当控制台窗口设置为光栅字体时,您可以获得这些字符组合.我可以在其全宽变体中包含文件名中的字符,例如:,?等,然后将其转换为正常的ASCII对应物,这将打破这一点.如果您需要准确的计数,请不要尝试这一点.
>使用find / c并尝试查找始终包含在文件名中的内容.显然点(.)是一个糟糕的选择.另一个答案表明
dir /a-d | find /c ":"
假设有关用户的语言环境的几个方面,并非所有这些都保证是真的(我已经留下了详细说明问题的评论)并且返回了太多的结果.
一般来说,你想在dir / b上使用find,它会切掉所有非文件名的东西,并以这种方式避免fencepost错误.
所以优雅的变体将是:
dir /b /a-d | find /c /v ""
它将首先输出所有文件名,每行一行.然后计算该输出中非空的所有行.由于文件名不能为空(除非我遗漏了一些东西,但Unicode不会根据我的测试将其绊倒).