Board logo

标题: [文件操作] [已解决]批处理如何统计当前目录下所有子目录指定文件类型的数量 [打印本页]

作者: thp2008    时间: 2023-5-22 12:32     标题: [已解决]批处理如何统计当前目录下所有子目录指定文件类型的数量

需求:
     我要统计当前目录下的,所有一级子目录下的所有*.jpg 。只统计一级子目录,子目录下,可能有更多的子目录,但是不管有多少子目录,都统计所有的总数到一级子目录。然后将统计的数量根据目录名称,总数量,输出到一个.txt文件中。总数量小于10个的目录,就不要记录了。


比如:示例目录如下:
E:/图库/A001
      /A002
      /A003/B004/C97
      /A004/E32
     /A005/S21
     /A006

批处理计算统计后

比如结果:输出到Num.txt

A001  2000张
A002  580张
A003  300张
A004  9900张
A005  19张

A006 由于数量小于10张,不计入列表。

就是想达到这种效果。目录名称,可能有中英文、数字、符号、空格、括号。有些目录可能没有*.jpg.

不知道,这种该如何实现,感谢帮助!


我自已不太懂,想了一下大概的思路如下:具体该如何组合,获取变量,传递变量,我搞不好。

首先要排除下面这种没有.jpg的目录:
  1. for /f "delims=" %%a in ('dir /ad /b') do dir "%%a\*.jpg" /s /a /w |findstr /v "找不到文件"
复制代码
将上面排除后的结果,给下面:
在剩下的目录中,可以通过下列方法统计:但是有个问题,这个数量,在"所列文件总数:" 下一行,换行了,这种该如何获取。
  1. for /f "delims=" %%a in ('dir /ad /b') do dir "%%a\*.jpg" /s /a /w |findstr "所列文件总数:"
复制代码
然后,计算结果,.jpg的数量变量,小于10张的再排除掉。

最后,将结果,目录名称和对应的数量,输出到.txt。就可以了。
作者: qixiaobin0715    时间: 2023-5-22 12:56

本帖最后由 qixiaobin0715 于 2023-5-22 14:11 编辑
  1. @echo off
  2. (for /d %%i in (*) do (
  3.     setlocal enabledelayedexpansion
  4.     for /f "delims=" %%j in ('dir /s /b /a-d "%%i\*.jpg"') do set /a n+=1
  5.     if !n! geq 10 echo,%%i !n!
  6.     endlocal
  7. ))>Num.txt
  8. pause
复制代码

作者: thp2008    时间: 2023-5-22 13:02

本帖最后由 thp2008 于 2023-5-22 13:05 编辑
qixiaobin0715 发表于 2023-5-22 12:56


感谢大神,我试了一下,部分统计出来了,可以,那些不可以的,我估计可能是特殊字符或者是文件夹名太长的原因。像有特殊字符或者超长文件夹名称的,尤其是日文、韩文,这种有没有什么好的方法,在代码里,可以处理呀?
作者: thp2008    时间: 2023-5-22 13:22

感谢大神的帮助,我在网上搜了一下,找到解决方法了。

再次表示感谢!
这样就好了。
  1. @echo off
  2. chcp 65001
  3. (for /d %%i in (*) do (
  4.     setlocal enabledelayedexpansion
  5.     for /f "delims=" %%j in ('dir /s /a /b /a-d "%%i\*.jpg"') do set /a n+=1
  6.     if !n! geq 10 echo,%%i !n!
  7.     endlocal
  8. ))>Num.txt
复制代码

作者: qixiaobin0715    时间: 2023-5-22 14:14

本帖最后由 qixiaobin0715 于 2023-5-22 14:16 编辑

回复 4# thp2008
网上的有真有假。修改不需要那么复杂吧,只需将代码第4行文件路径加上双引号即可,已修改。
作者: thp2008    时间: 2023-5-22 16:26

回复 5# qixiaobin0715

感谢,那个双引号,我发现了,修改了。主要是日文、韩文,ANSI显示不正常,批处理前面加上那句,以UTF-8显示,就可以正常显示和处理了。不加的话日文、韩文的很多不能显示和处理,我测试的结果是这样。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2