你将在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
尝试漂亮的技巧的例子。 对这些要小心,因为各种各样的事情可以打破这个。
常见错误:
使用find /c /v
并尝试查找从未包含在文件名中的内容,例如::
。 惯于。 工作。 可靠。 当控制台窗口设置为光栅字体,那么你可以得到这些字符组合。 我可以在文件名中包含字符,例如:
, ?
等全宽变体,然后将其转换为正常的ASCII对应,这将打破这一点。 如果你需要一个准确的数量,那么不要尝试这个。
使用find /c
并尝试find总是包含在文件名中的东西。 显然,点( .
)是一个不好的select。 另一个答案表明
dir /ad | find /c ":"
它假设了几个有关用户的语言环境的东西,并不是所有的东西都保证是真的(我留下了一个评论,详细描述了这些问题),并且返回了一个结果。
一般来说,你想在dir /b
上使用find
来dir /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.