Answers:
如果要使用进行操作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 ":"
它假定了有关用户区域设置的几件事,但并非所有事情都保证是正确的(我在此处留下了详细说明问题的注释),并且返回的结果太多。
通常,您希望find
在dir /b
其中使用来切掉所有非文件名的内容,并避免这种方式的篱笆错误。
因此,优雅的变体是:
dir /b /a-d | find /c /v ""
这将首先输出所有文件名,每个文件名一行。然后计算该输出的所有非空行。由于文件名不能为空(除非我遗漏了一些东西,但是根据我的测试,Unicode不会将其绊倒)。
dir /b /a-d | find /c /v ""
%count%
在解析时已扩展,因此可能会失败。
问与答将收到: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计数文件”。
(Get-ChildItem -recurse -filter "*.ps1").Count
dir
在底部提供了文件总数。
dir > file
..啊,我想念POSIX
dir > file
不能在Windows中工作?您知道,输出重定向并非完全是魔术。
dir | grep (something)
避免”做为避免缓慢的屏幕写操作,这种写操作会使事情变慢(并将其最小化)。
我发现最快的方法是在PS控制台中运行以下命令。
[System.IO.Directory]::GetFiles($path).Count
其中$ path是本地路径或UNC共享。
只计算dir / B输出(包括目录)中的行:
dir /B | find /c /v "~~~"
仅计数文件(无目录):
dir /A-D /B | find /c /v "~~~"
在网上找到了这个:
dir /a-d | find /c ":" > NUMfiles.###
set /p count=<NUMfiles.###
echo %count%
我进行了测试,它似乎可以正常工作。
dir
命令都将关闭,因为该命令在其中包含带有冒号的行,而不是文件。(2)这依赖于时间格式来包含冒号,而不必一定要这样。(3)它依赖于不包含冒号的数字格式,也不必一定要这样。此外,在这里浏览文件是不必要的,如果您没有写访问权,则是行不通的-不好的主意。
对于那些可能使用上面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后才需要此功能,否则我会考虑自己滚动(可能是C#应用程序),因为这是我最熟悉的(尽管VBScript或PowerShell也将是可行的)。
(顺便说一句-如果您使用的是cmd.exe,则不是DOS)
我相信您可以使用attrib来获取文件数:
attrib.exe /s /D *.*|find /c /v "" >> filecount.txt
这将在当前目录中创建一个名为filecount.txt的文件,其中包含当前目录中文件和文件夹的数量(包括新创建的文件)。您可以更改
*.*
至
<full_path>\*.*
为了获得特定目录的文件数。如果不想计数文件夹,请删除“ / D”选项。“ / s”选项处理指定路径中所有目录中的文件。因此,如果只希望文件位于指定的路径中,而又不想在子文件夹中包含文件,则将其删除。
因此,例如,如果您想找出C:\驱动器中有多少个文件,而不是任何子文件夹,则可以使用以下命令:
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.
find
也不是一个好主意。有关详细信息,请参见接受的答案。