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

时间:2012-06-12 20:08:33

标签: batch-file

我对此很新。请帮帮我

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

提前谢谢你 -vk

9 个答案:

答案 0 :(得分:39)

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

有很多方法可以做到这一点。我将展示的所有方法都涉及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%

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%

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

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

答案 1 :(得分:7)

mugume david answer在空文件夹上失败;在查找模式而不是所有文件时,Count为1而不是0。例如* .xml

这对我有用:

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

答案 2 :(得分:5)

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

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

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

答案 3 :(得分:4)

这可能会快一点:

dir /A:-D /B *.* 2>nul | find /c /v ""
`/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

答案 4 :(得分:3)

切换到目录和;

attrib.exe /s ./*.* |find /c /v ""

修改

我认为这很容易发现。使用

Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "batchfile.bat";
p.Start();
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();

我运行此变量output持有此

D:\VSS\USSD V3.0\WTU.USSD\USSDConsole\bin\Debug>attrib.exe /s ./*.*   | find /c /v "" 13

其中13是文件计数。它应该解决问题

答案 5 :(得分:3)

计算文件夹%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%.

答案 6 :(得分:1)

for /F "tokens=1" %a in ('dir ^| findstr "File(s)"') do echo %a

结果:

C:\MyDir> for /F "tokens=1" %a in ('dir ^| findstr "File(s)"') do @set FILE_COUNT=%a

C:\MyDir> echo %FILE_COUNT%
4   // <== There's your answer

答案 7 :(得分:1)

FOR /f "delims=" %%i IN ('attrib.exe ./*.* ^| find /v "File not found - " ^| find /c /v ""') DO SET myVar=%%i
ECHO %myVar%

这是基于(很多)早先的帖子,指出如果你使用DIR而不是attrib.exe,那么空目录的计数是错误的。

对于其他任何坚持将命令放入FOR循环的语法的人,请将命令用单引号括起来(假设它不包含它们)并使用^转义管道。

答案 8 :(得分:1)

我过去曾使用临时文件来执行此操作,如下所示。

DIR /B *.DAT | FIND.EXE /C /V "" > COUNT.TXT

FOR /F "tokens=1" %%f IN (COUNT.TXT) DO (
IF NOT %%f==6 SET _MSG=File count is %%f, and 6 were expected. & DEL COUNT.TXT & ECHO #### ERROR - FILE COUNT WAS %%f AND 6 WERE EXPECTED. #### >> %_LOGFILE% & GOTO SENDMAIL
)