批处理文件,用于计算目录中EVERY文件夹中的文件数,并将结果输出到文本文件

时间:2016-08-04 19:34:38

标签: windows batch-file

我要做的是制作一个批处理文件,该文件将递归进入每个文件夹并计算每个文件夹中的文件数。但是,我花了最后一小时尝试各种各样的东西,但它没有用。

我希望输出看起来像: X:Y其中X是文件夹名称,Y是X中的文件数。

setlocal EnableDelayedExpansion
set current=blank
FOR /D %%G in ("*") DO set current=%%G && call:count

:count
set count=0
for %%A in (*) do set /a count+=1
echo !current!:!count!>>"D:\User\Some\Directory\count.txt"

但这不起作用。输出为每个文件夹提供相同的编号。它输出的数字是目录本身的文件数,我认为是问题所在。

具体来说,如果我在C:\User\Example并且它有三个文件夹,A,B和C,我想要C:\User\Example\A中的文件数量等等,但它给了我这个号码C:\User\Example中的文件。希望有道理。

注意:在我的用例中,文件夹不包含子目录。

4 个答案:

答案 0 :(得分:3)

一种不同的方法。

<ExtData>Name="DummyName" Value="Garbage"</ExtData>

答案 1 :(得分:2)

这有效:

请注意,您必须整理set current=%%G&& call:countcurrent值为"A "(尾随空格,不是您想要的) 当您扫描子目录时,您必须在当前目录前加*

@echo off
del count.txt

setlocal EnableDelayedExpansion
set current=blank


FOR /D %%G in ("*") DO set current=%%G&& call:count

goto end

:count
set count=0
for %%A in (!current!\*) do set /a count+=1
echo !current!:!count!>>"count.txt"

:end

答案 2 :(得分:2)

这个问题的答案看起来像是一系列不同的方法来做同样的事情!这是另一个:

@echo off
setlocal EnableDelayedExpansion

for /F "tokens=1,2 delims=\" %%a in ('findstr /M /S "^" *.*') do (
   if "%%b" neq "" (
      set "name=%%a"
      set /A "count[!name: =_!]+=1"
   )
)
(for /F "tokens=2,3 delims=[]=" %%a in ('set count[') do (
   set "name=%%a"
   echo !name:_= !:%%b
)) > count.txt

这种方法看起来很复杂,因为管理文件夹名称中的空格。如果文件夹没有空格,则可以删除6行(和延迟扩展);那就是:

@echo off
setlocal

for /F "tokens=1,2 delims=\" %%a in ('findstr /M /S "^" *.*') do (
   if "%%b" neq "" set /A "count[%%a]+=1"
)
(for /F "tokens=2,3 delims=[]=" %%a in ('set count[') do echo %%a:%%b) > count.txt

答案 3 :(得分:0)

以下是处理它的PowerShell脚本:

Get-ChildItem -Path . -Recurse -ErrorAction SilentlyContinue -Force 
   | Where-Object { $_.Attributes -eq "Directory"} 
   | ForEach-Object {Write-Host $_.Name, $_.GetFiles().Count }

打印到屏幕,但写入文件很简单。

扫描一直向下。如果您只想要第一层文件夹,请删除“-Recurse”

优点是你正在对真实对象进行实际操作,而不是试图通过解析文本来欺骗操作系统做一些它不是真正想做的事情。

在这里,弄清楚这是做什么应该相对简单,即使你对PowerShell知之甚少(从这条路径获取一个子列表,这些是目录,并为每一个,打印它的名字) ,以及其中的文件数。)