找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 28425|回复: 12

[文件操作] 【已解决】批处理如何统计不同前缀文件名的的文件数量?

[复制链接]
发表于 2018-9-5 22:14:27 | 显示全部楼层 |阅读模式
本帖最后由 bataiping 于 2018-9-6 18:35 编辑

某文件夹下有以下图片(实际有数千至数万张):
打印_18885-1.jpg
打印_18885-2.jpg
打印_18885-3.jpg
打印_18886-1.jpg
打印_18886-2.jpg
打印_18887.jpg
打印_18888.jpg
打印_18889-1.jpg
打印_18889-2.jpg
打印_18890-1.jpg
打印_18890-2.jpg
...

想要返回结果:“前8位文件名 页数”,如下:
打印_18885 3
打印_18886 2
打印_18887 1
打印_18888 1
打印_18889 2
打印_18890 2


谢大神指教!!!

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

 楼主| 发表于 2018-9-5 23:09:00 | 显示全部楼层
我现在是先获取全部文件名,输入到txt,然后复制到excel里面用函数截取和统计,感觉好累
发表于 2018-9-6 00:22:30 | 显示全部楼层
  1. @echo off & setlocal enabledelayedexpansion
  2. cd /d %~dp0

  3. ::去重,保留唯一前缀名
  4. for /f "delims=-" %%i in ('dir /b /a-d *.jpg') do (
  5.         if "!str!" neq "%%~ni"  set /a "n+=1" & set "a!n!=%%~ni" & set "str=%%~ni"
  6. )

  7. REM echo;n=%n%
  8. (for /l %%i in (1 1 %n%) do (       
  9.         REM echo;!a%%i!   ==== %%i
  10.         for /f "delims=" %%x in ('dir /b /a-d *.jpg ^|find /c "!a%%i!"') do        echo;!a%%i! 页数:%%x
  11. ))>list.txt

  12. pause>nul
复制代码
 楼主| 发表于 2018-9-6 08:48:57 | 显示全部楼层
回复 3# ai20110304


    测试,输出了完整文件名 及页数,并没有截取前面指定位数,是不是有什么地方需要我手动改的
发表于 2018-9-6 08:53:42 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion

  3. (
  4.     for %%i in ( 打印_*.jpg ) do (
  5.         rem s1=当前行
  6.         set "s1=%%i"

  7.         if not "!s1:~0,8!" == "!s2:~0,8!" (
  8.             if defined s2 (echo;!s2:~0,8! !n!)
  9.             if not "!n!" == "1" (set n=1)
  10.         ) else (set /a n+=1)

  11.         rem s2=上一行
  12.         set "s2=%%i"
  13.     )
  14.     if defined s2 (echo;!s2:~0,8! !n!)

  15. ) > Result.Log

  16. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

发表于 2018-9-6 08:55:34 | 显示全部楼层
本帖最后由 WHY 于 2018-9-6 08:58 编辑
  1. PowerShell "dir '打印_[0-9][0-9][0-9][0-9][0-9]*.jpg' | group{$_.Name.SubString(0,8)} | ForEach{$_.Name + ' ' + $_.Count}" > 1.LOG
复制代码
 楼主| 发表于 2018-9-6 09:04:07 | 显示全部楼层
回复 5# WHY


    好用,谢谢
 楼主| 发表于 2018-9-6 18:36:21 | 显示全部楼层
WHY 发表于 2018-9-6 08:55

请问这个在xp上能用吗?
发表于 2018-9-6 19:08:59 | 显示全部楼层
回复 8# bataiping


    建议亲自测试一下,遇到问题再讨论。
发表于 2018-9-6 20:26:19 | 显示全部楼层
本帖最后由 ai20110304 于 2018-9-6 20:27 编辑

回复 4# bataiping


   功能明明实现了的。你把页数那几字去掉就行。   “页数:” 只是我给你添加上去好看的。哎。看来适合把原原本本的发给你才觉得实现了
发表于 2018-9-7 10:28:07 | 显示全部楼层
回复 10# ai20110304


    有可能楼主在顶楼给的数据都是凭空捏造的吧,文件名并不包含 "-" 字符,用 delims 分割后任然输出了 "完整文件名"。
如果文件数目过多(顶楼说是数万),定义成千上万个变量不太合适,可能会影响执行效率。
 楼主| 发表于 2018-10-17 19:15:43 | 显示全部楼层
回复 10# ai20110304

抱歉这么久才回复您,测试可用,功能实现正常,谢谢!
 楼主| 发表于 2018-10-17 19:16:38 | 显示全部楼层
回复 11# WHY


    是的,效率问题很明显
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 19:54 , Processed in 0.021520 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表