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

p.c*_*ell 25 powershell command-line-interface directory windows-command-prompt

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

这里有powershell选项吗?

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

Joe*_*oey 30

如果你想用 来做cmd,那么下面是一种简单的方法:

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

那是假设命令行。在批处理文件中,你会做

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

它做得更好一些。您可以>nul批量删除,因为set /a如果从批处理文件运行不会显示结果 - 它直接从命令行显示。此外,循环中的%符号for必须加倍。

我见过很多例子,人们尝试使用find /c. 对这些非常小心,因为各种事情都会破坏这一点。

常见错误:

  1. 使用find /c /v并尝试查找文件名中从未包含的内容,例如::. 惯于。工作。可靠。当控制台窗口设置为光栅字体,那么你可以让这些字符组合。我可以包括在文件名中的字符,如:?等在他们的例如全宽变体,那么这将被转换到正常的ASCII同行这将打破这一点。如果您需要准确计数,请不要尝试此方法。

  2. 使用find /c并尝试查找始终包含在文件名中的内容。显然,点 ( .) 是一个糟糕的选择。另一个答案表明

    dir /a-d | find /c ":"
    
    Run Code Online (Sandbox Code Playgroud)

    它假设了一些关于用户语言环境的事情,并不是所有的事情都保证是真的(我已经留下了一条评论,详细说明了那里的问题)并且返回一个结果太多。

通常,您希望使用findon dir /bwhich 删除所有非文件名内容并以这种方式避免 fencepost 错误。

所以优雅的变体是:

dir /b /a-d | find /c /v ""
Run Code Online (Sandbox Code Playgroud)

这将首先输出所有文件名,每行一行。然后计算该输出的所有非空行。由于文件名不能为空(除非我遗漏了一些东西,但根据我的测试,Unicode 不会出错)。


Tre*_*oke 17

询问,您将收到:http : //technet.microsoft.com/en-us/library/ee692796.aspx

计算文件夹中的项目数

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

(Get-ChildItem C:\Scripts).Count
Run Code Online (Sandbox Code Playgroud)

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

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

(Get-ChildItem C:\Scripts -filter "*.ps1").Count
Run Code Online (Sandbox Code Playgroud)

仅供参考..我在谷歌上搜索了“powershell计数文件”。

  • 从同一个链接,如果你也想计算子文件夹中的文件,请使用:`(Get-ChildItem -recurse -filter "*.ps1").Count` (4认同)
  • 只是要清楚 (Get-ChildItem C:\Scripts).Count 不会返回文件夹中的文件数,而是返回文件夹中的 OBJECTS 数。您必须添加过滤器或文件规范才能使其对文件进行计数。从 C: 驱动器的根目录尝试 (gci).count 和 dir 并查看数字的差异 (3认同)

ros*_*snz 9

dir /a-d | find "File(s)"
Run Code Online (Sandbox Code Playgroud)

关于使用 PowerShell 进行此类简单文件操作的警告 - 与 cmd.exe 相比,它非常慢,尤其是通过网络连接或目录中有数千个文件时。有关更多信息,请参阅此论坛帖子


小智 8

我找到的最快的方法是在 PS 控制台中运行以下命令。

[System.IO.Directory]::GetFiles($path).Count
Run Code Online (Sandbox Code Playgroud)

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

  • 看那个。在提出这个问题将近 7.5 年后,一个有效的真棒答案出现了! (2认同)

lor*_*zog 7

dir 在底部为您提供总文件数。

  • 并避免观看所有行在 cmd 窗口中滚动的成本......最小化它,它会更快地工作。 (2认同)