批处理文件 - 计算文件夹中的文件数并存储在变量中

use*_*157 27 batch-file

我对此很新.请帮我

我正在尝试编写一个批处理文件程序来计算文件夹中的文件数,并将其分配给变量并显示它以验证它是否已存储请帮我解释语法,

提前谢谢-VK

dbe*_*ham 44

我假设您不想计算隐藏或系统文件.

有很多方法可以做到这一点.我将展示的所有方法都涉及FOR命令的某种形式.FOR命令的许多变体看起来几乎相同,但它们的行为却截然不同.对初学者来说可能会让人感到困惑.

您可以通过键入HELP FORFOR /?从命令行获得帮助.但如果你不习惯阅读它,那帮助就有点神秘了.

1)DIR命令列出目录中的文件数.您可以将DIR的结果传递给FIND以获取相关的行,然后使用FOR/F从行中解析所需的值.此技术的问题是您搜索的字符串必须根据操作系统使用的语言进行更改.

@echo off
for /f %%A in ('dir ^| find "File(s)"') do set cnt=%%A
echo File count = %cnt%
Run Code Online (Sandbox Code Playgroud)

2)您可以使用DIR /B /A-D-H-S列出非隐藏/非系统文件而不显示其他信息,将结果通过管道传递给FIND来计算文件数,并使用FOR/F读取结果.

@echo off
for /f %%A in ('dir /a-d-s-h /b ^| find /v /c ""') do set cnt=%%A
echo File count = %cnt%
Run Code Online (Sandbox Code Playgroud)

3)您可以使用简单的FOR来枚举所有文件,使用SET/A来为每个找到的文件递增计数器.

@echo off
set cnt=0
for %%A in (*) do set /a cnt+=1
echo File count = %cnt%
Run Code Online (Sandbox Code Playgroud)

  • @LoukMo - 答案假定当前目录。要指定不同的文件夹,只需将路径放在 DIR 命令之后。 (2认同)

小智 8

mugume大卫答案失败的一个空文件夹; 在查找模式而不是所有文件时,Count为1而不是0.例如*.xml

这对我有用:

attrib.exe /s ./*.xml | find /v "File not found - " | find /c /v ""


小智 8

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

这是最好的.....你的变量是: %count%

注意:您可以将(*.txt)更改为任何其他文件扩展名以计算其他文件.....

  • 这在概念上与 3 年前[我的答案](/sf/answers/770371031/)中的第三个选项相同。为什么要发布相同的答案? (2认同)

gre*_*een 6

%FOLDER%以下是对文件夹及其子文件夹中具有ANY属性的文件进行计数的最快代码。该代码用于命令脚本(批处理)文件中的脚本。

@for /f %%a in ('2^>nul dir "%FOLDER%" /a-d/b/-o/-p/s^|find /v /c ""') do set n=%%a
@echo Total files: %n%.
Run Code Online (Sandbox Code Playgroud)


And*_*dry 5

这可能会快一点:

dir /A:-D /B *.* 2>nul | find /c /v ""
Run Code Online (Sandbox Code Playgroud)
`/A:-D` - filters out only non directory items (files)
`/B`    - prints only file names (no need a full path request)
`*.*`   - can filters out specific file names (currently - all)
`2>nul` - suppresses all error lines output to does not count them
Run Code Online (Sandbox Code Playgroud)