[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
纯批其实不好玩
  1. @echo off & setlocal enabledelayedexpansion
  2. :: 功能:
  3. ::    文件名前面相同多个的创建文件装起来
  4. ::    无相同得单独一个文件不管
  5. for /f "delims=" %%i in ('dir /a-d /b') do (
  6. set "name=%%~ni" & set "n=" & set "_n=" & set "pre="
  7. for %%j in (0,1,2,3,4,5,6,7,8,9) do (
  8. set name=!name:%%j=!
  9. set suf=!name:~-1!
  10. )
  11. set "name=%%~ni"
  12. rem 不想用goto,就假设名字中没有20个相同的字符
  13. for /l %%j in (1,1,20) do (
  14. if not defined n (
  15. for %%k in (!suf!) do set name=!name:*%%k=!
  16. set /a "tmp=name"
  17. if "!name!"=="!tmp!" set n=!name!
  18. )
  19. )
  20. set "name=%%~ni" & set "tmp="
  21. if defined n (
  22. for %%j in (!n!) do set pname="!name:%%j=" "!"
  23. for %%j in (!pname!) do (
  24. if defined pre (
  25. if "%%~j"=="" (
  26. set tmp=!n!
  27. ) else (
  28. if defined tmp (
  29. set "pre=!pre!!tmp!" & set "tmp="
  30. )
  31. set pre=!pre!!n!%%~j
  32. )
  33. ) else set pre=%%~j
  34. )
  35. rem 文件名有空格时影响set /a,先替换一下,完事换回来
  36. set pre=!pre: ={_}!
  37. set /a "#fnum[!pre!]+=1,_n=#fnum[!pre!]"
  38. set pre=!pre:{_}= !
  39. if !_n! gtr 1 (
  40. for /f "delims=" %%j in ("!pre!") do (
  41. if not "!%%j!"=="" (
  42. echo;文件夹:[!pre!]
  43. echo;    1. !%%j!
  44. rem echo;拷贝!%%j! --^> 文件夹%%j
  45. set "!pre!="
  46. )
  47. )
  48. echo;    !_n!. %%~nxi
  49. rem echo;拷贝!name! --^> 文件夹!pre!
  50. ) else set !pre!=%%~nxi
  51. )
  52. )
  53. echo;--------------------------------------
  54. echo;打印一下数量,{_}代表空格
  55. set #fnum
  56. pause & exit /b
复制代码
1

评分人数

人生是一部书/只有这一页最温暖/读懂它的时候/我们在远方流泪...

TOP

返回列表