p.campbell Asked: 2010-02-09 09:12:40 +0800 CST2010-02-09 09:12:40 +0800 CST 2010-02-09 09:12:40 +0800 CST Windows 命令提示符:如何获取当前目录中所有文件的计数? 772 您将使用什么命令cmd.exe来查找当前目录中的文件数? 这里有powershell选项吗? 更新:我希望避免dir,因为我知道当前目录中有 10,000 多个文件。想避免枚举输出到cmd窗口。谢谢! powershell command-line-interface windows-command-prompt directory 13 个回答 Voted Best Answer Joey 2010-02-10T09:31:49+08:002010-02-10T09:31:49+08:00 如果你想用 来做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 ":" 它假设了有关用户语言环境的几件事,但并非所有这些都保证是正确的(我已经留下了详细说明那里问题的评论)并且返回了一个结果太多。 通常,您希望使用findwhichdir /b删除所有非文件名内容并以这种方式避免栅栏错误。 所以优雅的变体是: dir /b /a-d | find /c /v "" 这将首先输出所有文件名,每个文件名一行。然后计算该输出的所有非空行。由于文件名不能为空(除非我遗漏了什么,但根据我的测试,Unicode 不会出错)。 Trevoke 2010-02-09T09:35:44+08:002010-02-09T09:35:44+08:00 询问,您将收到: http ://technet.microsoft.com/en-us/library/ee692796.aspx 计算文件夹中的项目数 好吧,你知道什么:看起来太阳终于要出来了,这意味着我们差不多该走了。然而,在开始之前,让我们向您展示 Get-ChildItem cmdlet 的最后一个小技巧。有时您并不需要对文件夹中的文件有太多了解;您真正需要知道的是在特定文件夹中可以找到多少个文件(如果有)。以下是快速计算文件夹中文件数量的方法: (Get-ChildItem C:\Scripts).Count 我们在这里做什么?我们只是使用 Get-ChildItem 来返回文件夹 C:\Scripts 中找到的所有项目的集合;因为这是一个集合,所以我们要做的就是回显 Count 属性的值,它告诉我们集合中的项目数。请注意括号的使用:我们将 Get-ChildItem 命令括在括号中,以确保 Windows PowerShell 首先获取该集合,然后才回显该集合的 Count 属性值。 当然,您可以在调用 Get-ChildItem 时包含一个过滤器。需要知道文件夹 C:\Scripts 中有多少个 .PS1 文件?好的多克: (Get-ChildItem C:\Scripts -filter "*.ps1").Count 仅供参考..我用谷歌搜索了“powershell 计数文件”。 rossnz 2010-04-07T18:37:41+08:002010-04-07T18:37:41+08:00 dir /a-d | find "File(s)" 关于使用 PowerShell 进行此类简单文件操作的警告 - 与 cmd.exe 相比,它的速度非常慢,尤其是通过网络连接或目录中有数千个文件时。有关更多信息,请参阅此论坛帖子。 John Brooks 2017-05-31T02:58:48+08:002017-05-31T02:58:48+08:00 我发现最快的方法是在 PS 控制台中运行以下命令。 [System.IO.Directory]::GetFiles($path).Count 其中 $path 是本地路径或 UNC 共享。 lorenzog 2010-02-09T09:14:08+08:002010-02-09T09:14:08+08:00 dir在底部为您提供总文件数。 Garcia 2012-12-04T05:20:34+08:002012-12-04T05:20:34+08:00 只计算 dir /B 输出中的行数(包括目录): dir /B | find /c /v "~~~" 只计算文件(没有目录): dir /A-D /B | find /c /v "~~~" Kelsey 2010-02-09T09:21:01+08:002010-02-09T09:21:01+08:00 在网上找到了这个: dir /a-d | find /c ":" > NUMfiles.### set /p count=<NUMfiles.### echo %count% 我测试过,它似乎工作。 Heather M. 2011-02-25T16:16:03+08:002011-02-25T16:16:03+08:00 对于那些可能使用上述 Trevoke 的 PowerShell 答案的人(Windows 命令提示符:如何获取当前目录中所有文件的计数?),只是一个警告:根据设计,回显 Get-ChildItem 返回的集合的 Count 属性可能会产生误导性结果如果值为 1 或 0。这是因为 Count 属性仅适用于数组。如果 Get-ChildItem 返回的项目少于 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。 dyasny 2010-02-09T09:15:06+08:002010-02-09T09:15:06+08:00 dir返回底部的文件和目录数 Jim B 2010-02-09T09:57:24+08:002010-02-09T09:57:24+08:00 DIr当然会工作 无需在服务器上安装任何东西,但在工作站上安装 powershell,您可以执行以下操作: (gwmi -computer theserver -query "select *from cim_datafile where path = '\\'").count 该命令将为您提供所有文件(包括系统和隐藏文件),如前所述,如果机器上装有 powershell,您可以简单地 (GCI c:\*.*).count 请注意,如果您不包括. 您将获得所有文件和所有目录的计数。您将不包括需要添加的隐藏文件和系统文件 -force 将它们全部计数
如果你想用 来做
cmd
,那么以下是简单的方法:这是假设命令行。在批处理文件中你会做
哪个做得更好。您可以批量删除
>nul
,因为set /a
如果从批处理文件运行将不会显示结果 - 它直接从命令行显示。此外,循环中的%
符号for
必须加倍。我见过很多人尝试使用
find /c
. 对这些要非常小心,因为各种事情都会破坏这一点。常见错误:
使用
find /c /v
并尝试查找文件名中从未包含的内容,例如::
. 惯于。工作。可靠。当控制台窗口设置为光栅字体时,您可以获得这些字符组合。例如,我可以在文件名中包含字符,例如全角变体中的 , 等,然后将其转换为正常的 ASCII 对应字符,这将破坏这一点:
。?
如果您需要准确的计数,请不要尝试此操作。使用
find /c
并尝试查找始终包含在文件名中的内容。显然,点 (.
) 是一个糟糕的选择。另一个答案表明它假设了有关用户语言环境的几件事,但并非所有这些都保证是正确的(我已经留下了详细说明那里问题的评论)并且返回了一个结果太多。
通常,您希望使用
find
whichdir /b
删除所有非文件名内容并以这种方式避免栅栏错误。所以优雅的变体是:
这将首先输出所有文件名,每个文件名一行。然后计算该输出的所有非空行。由于文件名不能为空(除非我遗漏了什么,但根据我的测试,Unicode 不会出错)。
询问,您将收到: http ://technet.microsoft.com/en-us/library/ee692796.aspx
仅供参考..我用谷歌搜索了“powershell 计数文件”。
关于使用 PowerShell 进行此类简单文件操作的警告 - 与 cmd.exe 相比,它的速度非常慢,尤其是通过网络连接或目录中有数千个文件时。有关更多信息,请参阅此论坛帖子。
我发现最快的方法是在 PS 控制台中运行以下命令。
其中 $path 是本地路径或 UNC 共享。
dir
在底部为您提供总文件数。只计算 dir /B 输出中的行数(包括目录):
dir /B | find /c /v "~~~"
只计算文件(没有目录):
dir /A-D /B | find /c /v "~~~"
在网上找到了这个:
我测试过,它似乎工作。
对于那些可能使用上述 Trevoke 的 PowerShell 答案的人(Windows 命令提示符:如何获取当前目录中所有文件的计数?),只是一个警告:根据设计,回显 Get-ChildItem 返回的集合的 Count 属性可能会产生误导性结果如果值为 1 或 0。这是因为 Count 属性仅适用于数组。如果 Get-ChildItem 返回的项目少于 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,您可以执行以下操作:
该命令将为您提供所有文件(包括系统和隐藏文件),如前所述,如果机器上装有 powershell,您可以简单地
请注意,如果您不包括. 您将获得所有文件和所有目录的计数。您将不包括需要添加的隐藏文件和系统文件 -force 将它们全部计数