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
. 对这些要非常小心,因为各种事情都会破坏这一点。
常见错误:
使用find /c /v
并尝试查找文件名中从未包含的内容,例如::
. 惯于。工作。可靠。当控制台窗口设置为光栅字体,那么你可以让这些字符组合。我可以包括在文件名中的字符,如:
,?
等在他们的例如全宽变体,那么这将被转换到正常的ASCII同行这将打破这一点。如果您需要准确计数,请不要尝试此方法。
使用find /c
并尝试查找始终包含在文件名中的内容。显然,点 ( .
) 是一个糟糕的选择。另一个答案表明
dir /a-d | find /c ":"
Run Code Online (Sandbox Code Playgroud)
它假设了一些关于用户语言环境的事情,并不是所有的事情都保证是真的(我已经留下了一条评论,详细说明了那里的问题)并且返回一个结果太多。
通常,您希望使用find
on dir /b
which 删除所有非文件名内容并以这种方式避免 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计数文件”。
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 共享。
归档时间: |
|
查看次数: |
192348 次 |
最近记录: |