Windows命令提示符:如何获取当前目录中的所有文件的计数?

你将在cmd.exe使用什么命令来查找当前目录中的文件数量?

在这里有一个PowerShell的选项?

更新 :我希望避免dir ,因为我知道当前目录中有超过10,000个文件。 希望避免枚举输出到cmd窗口。 谢谢!

如果你想用cmd来做,那么以下是做这件事的简单方法:

 set count=0 & for %x in (*) do @(set /a count+=1 >nul) echo %count% 

这是假设命令行。 在一个batch file,你会做的

 @echo off setlocal enableextensions set count=0 for %%x in (*) do set /a count+=1 echo %count% endlocal 

哪些事情会更好一些。 你可以批量删除>nul ,因为如果从batch file运行, set /a将不会显示结果 – 它直接从命令行执行。 此外for循环中的%符号必须加倍。

我见过不less人用find /c尝试漂亮的技巧的例子。 对这些要小心,因为各种各样的事情可以打破这个。

常见错误:

  1. 使用find /c /v并尝试查找从未包含在文件名中的内容,例如:: 。 惯于。 工作。 可靠。 当控制台窗口设置为光栅字体,那么你可以得到这些字符组合。 我可以在文件名中包含字符,例如:? 等全宽变体,然后将其转换为正常的ASCII对应,这将打破这一点。 如果你需要一个准确的数量,那么不要尝试这个。

  2. 使用find /c并尝试find总是包含在文件名中的东西。 显然,点( . )是一个不好的select。 另一个答案表明

     dir /ad | find /c ":" 

    它假设了几个有关用户的语言环境的东西,并不是所有的东西都保证是真的(我留下了一个评论,详细描述了这些问题),并且返回了一个结果。

一般来说,你想在dir /b上使用finddir /b所有非文件名的东西,并通过这种方式避免fencepost错误。

所以优雅的变体将是:

 dir /b /ad | find /c /v "" 

它将首先输出所有文件名,每行一个。 然后统计输出中不是空的所有行。 由于文件名不能为空(除非我错过了一些东西,但是Unicode根据我的testing不会将其跳出去)。

问,你会得到: http : //technet.microsoft.com/en-us/library/ee692796.aspx

计算文件夹中的项目数量

那么,你知道什么:看起来太阳终于出来了,这意味着我们快要走了。 然而,在我们做之前,让我们向您展示Get-ChildItem cmdlet的最后一个小技巧。 有时候你并不需要知道文件夹中的文件; 你真正需要知道的是在特定的文件夹中可以find多less个文件(如果有的话)。 以下是如何快速计算文件夹中的文件数量的方法:

 (Get-ChildItem C:\Scripts).Count 

我们在这里做什么? 我们只是使用Get-ChildItem来返回文件夹C:\ Scripts中find的所有项目的集合; 因为这是一个集合,我们所要做的就是回显Count属性的值,它告诉我们集合中的项目数量。 请注意括号的使用:我们将Get-ChildItem命令放在括号中,以确保Windows PowerShell首先获取集合,然后回显该集合的Count属性的值。

当然,您可以在调用Get-ChildItem时包含一个filter。 需要知道有多less.PS1文件在文件夹C:\ Scripts中? 奥基-doke:

 (Get-ChildItem C:\Scripts -filter "*.ps1").Count 

FYI ..我谷歌search“powershell计数文件”。

 dir /ad | find "File(s)" 

关于如何使用PowerShell进行简单文件操作的警告 – 与cmd.exe相比,特别是在networking连接或目录中有成千上万的文件时,速度非常慢。 看到这个论坛post了解更多信息。

dir给你的底部总文件数。

我发现最快的方法是在PS控制台中运行以下内容。

 [System.IO.Directory]::GetFiles($path).Count 

其中$ path是本地path或UNC共享。

只需从dir / B输出(包含的目录)中统计行数:
dir /B | find /c /v "~~~"

只是计数文件(没有dirs):
dir /AD /B | find /c /v "~~~"

在网上find这个 :

 dir /ad | find /c ":" > NUMfiles.### set /p count=<NUMfiles.### echo %count% 

我testing,似乎工作。

对于那些可能使用Trevoke的PowerShell答案( Windows命令提示符:如何获取当前目录中的所有文件的计数? )的人来说,只是一个警告:通过devise,回显由Get-ChildItem返回的集合的Count属性可以给出令人误解的结果如果值是1或0.这是因为Count属性只在数组上可用。 如果Get-ChildItem返回的项目less于2个,则结果为标量,.Count不返回任何内容。 为了解决这个问题,明确地将其转换为数组,例如@(Get-ChildItem C:\ Scripts).Count。

有关详细信息,请参阅http://connect.microsoft.com/PowerShell/feedback/details/354672/get-childitem-count-problem-with-one-file或http://www.vistax64.com/powershell/266379 -get-childitem-count-not-working-one-file.html 。

dir返回底部文件和目录的数量

DIr当然会工作

没有在服务器上安装某些东西,但在工作站上安装了powershell,你可以这样做:

 (gwmi -computer theserver -query "select *from cim_datafile where path = '\\'").count 

该命令会给你所有的文件(包括系统和隐藏),如前所述,如果PowerShell的机器上,你可以简单地

 (GCI c:\*.*).count 

请注意,如果你不包括 你会得到所有文件和所有目录的计数。 您将不会包含您需要添加的隐藏文件和系统文件,以统计所有文件

如果我只需要这个,我只是使用目录,否则我会考虑自己滚动,可能作为一个C#应用程序,因为这是我最熟悉的(尽pipeVBScript或PowerShell也将是可行的)。

(顺便说一句 – 如果你使用的是cmd.exe,那不是DOS)

我相信你可以使用attrib来获取文件数量:

 attrib.exe /s /D *.*|find /c /v "" >> filecount.txt 

这将在当前目录中创build一个名为filecount.txt的文件,其中包含当前目录(包括新创build的文件)中的文件和文件夹的数量。 你可以改变

 *.* 

 <full_path>\*.* 

以获得特定目录的文件数量。 如果您不想计算文件夹,请删除“/ D”选项。 “/ s”选项处理指定path中的所有目录中的文件。 因此,如果您只想要指定path中的文件并且不想将文件包含在子文件夹中,请将其删除。

因此,例如,如果你想知道C:\驱动器中有多less文件,而不是任何子文件夹,你可以使用这个命令:

 attrib.exe C:\*.* | find /c /v "" >> filecount.txt 

我正在做类似的事情,这可以立即处理任何数量的文件。

 Setlocal enabledelayedexpansion Dir /A | find "File(s)" >tmp For /F "tokens=1" %%i in (tmp) do set n=%%i Del tmp If !n! GEQ 10 echo Too many files in directory.