Board logo

标题: [文件操作] [已解决]批处理如何统计多年份并含有关键字的文件个数? [打印本页]

作者: playinthesky    时间: 2015-10-12 19:43     标题: [已解决]批处理如何统计多年份并含有关键字的文件个数?

请教大家,希望能够有高手可以解决。
题目:有很多文件在同一个目录下,但是要区分年份和保管期限,单独的,在下会写,可把年份叠加怎么弄?
  1. @echo off
  2. for /r %%a in (*-2001-永久-*.jpg) do (
  3.    set /a num01+=1
  4. )
  5. for /r %%b in (*-2001-长期-*.jpg) do (
  6.    set /a num02+=1
  7. )
  8. echo 2001年永久%num01%件
  9. echo 2001年长期%num02%件
  10. pause
复制代码
如果我要统计从1960年到2015年的永久和长期的数量,岂不是要一个个写了烦死?能否有简便的方法,望赐教。
作者: playinthesky    时间: 2015-10-12 19:52

我好像研究出来了。
作者: pcl_test    时间: 2015-10-12 19:55

  1. for /l %%i in (1960,1,2015) do ……
复制代码

作者: playinthesky    时间: 2015-10-12 20:00

回复 3# pcl_test


    我试试看。谢谢啊。但是好像不太行,因为还要是识别保管期限。
作者: playinthesky    时间: 2015-10-12 20:28

回复 3# pcl_test
  1. @echo off
  2. for %%i in (*.jpg) do (
  3.     for /f "tokens=1-4 delims=-" %%a in ("%%i") do (
  4. for /r %%k in (*-%%b-%%c-*.jpg) do (
  5.     set /a num+=1
  6. )
  7.     echo %%b年期限%%c有%num%件
  8.    )
  9. )
  10. pause
复制代码
我想让年度和保管期限都成变量,可否?
作者: playinthesky    时间: 2015-10-12 21:02

本帖最后由 pcl_test 于 2015-10-12 21:13 编辑

回复 3# pcl_test


年份显示不出来,求帮助。
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%i in (2001,1,2010) do (
  3. for /r %%a in ("*-%%i-永久-*.jpg") do (
  4.     set /a num01+=1
  5. )
  6. for /r %%b in ("*-%%i-长期-*.jpg") do (
  7.     set /a num02+=1
  8. )
  9. )
  10. echo %i%年永久%num01%件
  11. echo %i%年长期%num02%件
  12. pause
复制代码

作者: pcl_test    时间: 2015-10-12 21:14

本帖最后由 pcl_test 于 2015-10-12 21:16 编辑

回复 6# playinthesky
  1. @echo off
  2. for /l %%i in (2001,1,2010) do (
  3. setlocal enabledelayedexpansion
  4. for /r %%a in ("*-%%i-永久-*.jpg") do set /a num01+=1
  5. for /r %%b in ("*-%%i-长期-*.jpg") do set /a num02+=1
  6. echo %%i年永久!num01!件
  7. echo %%i年长期!num02!件
  8. endlocal
  9. )
  10. pause
复制代码

作者: terse    时间: 2015-10-12 21:29

这样是否快点呢
  1. dir /s /b /a-d "*-%%i-永久-*.jpg" |find /v /c ""  
复制代码

作者: playinthesky    时间: 2015-10-12 21:31

回复 7# pcl_test


    谢谢了,成功!么么哒!
作者: playinthesky    时间: 2015-10-12 21:33

回复 8# terse


    我试试看!谢谢你!
作者: WHY    时间: 2015-10-13 09:27

另外一种办法,用 dir + findstr 过滤
比如从1960年到2015年,分三段:1960~1999、2000~2009、2010~2015
  1. @echo off
  2. set "s=\-19[6-9][0-9]\-永久\-[^\\]*\.jpg \-200[0-9]\-永久\-[^\\]*\.jpg \-201[0-5]\-永久\-[^\\]*\.jpg"
  3. for /f %%i in ('dir /b /s /a-d^|findstr /i /e "%s% %s:永久=长期%"^|find /c /v ""') do set "num=%%i"
  4. echo %num%
  5. pause
复制代码





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