[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

请教大家,希望能够有高手可以解决。
题目:有很多文件在同一个目录下,但是要区分年份和保管期限,单独的,在下会写,可把年份叠加怎么弄?
  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年的永久和长期的数量,岂不是要一个个写了烦死?能否有简便的方法,望赐教。

另外一种办法,用 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
复制代码

TOP

回复 8# terse


    我试试看!谢谢你!

TOP

回复 7# pcl_test


    谢谢了,成功!么么哒!

TOP

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

TOP

本帖最后由 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
复制代码

TOP

本帖最后由 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
复制代码

TOP

回复 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
复制代码
我想让年度和保管期限都成变量,可否?

TOP

回复 3# pcl_test


    我试试看。谢谢啊。但是好像不太行,因为还要是识别保管期限。

TOP

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

TOP

我好像研究出来了。

TOP

返回列表