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


代码保存为 test.bat

请参考Q-04把bat文件保存为ANSI编码:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA
  1. @echo off
  2. cd /d "D:\123"
  3. set "FileNum=11"
  4. setlocal enabledelayedexpansion
  5. for /f "delims=" %%i in ('dir /b /a-d *.pdf') do (
  6.     echo Change name from "%%i" to "!FileNum!%%~xi"
  7.     ren "%%i" "!FileNum!%%~xi"
  8.     set /a FileNum+=1
  9. )
  10. pause
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 31# Batcher


    是的,这样能输出结果,谢谢大佬,特别感谢,不过这只是各测试板块,我真正要得到的是用txt导入不规则的文件名,我看我能不能综合一下两位大佬的结果,自己做出我想要的东西

TOP

回复 32# 小白唐唐


    祝好。如果搞不定,再回来说出内心深处的真实需求。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

假设要处理的文件夹是D:\123 PDF文件 新文件名存入LIST.TXT
  1. @echo off&setlocal enabledelayedexpansion
  2. rem 将文件存为ANSI编码  新文件名保存入list.txt
  3. set "ph=d:\123"
  4. REM 统计 list.txt 内文件数量并赋值 如果d:\123内已经存在文件退出
  5. for /f "delims=" %%i in (list.txt) do (
  6.      if exist "!ph!\%%i" (
  7.         set str=!ph! 已存在 %%i 文件
  8.         goto :end
  9.      )
  10.      set /an+=1
  11.      set "new_file_!n!=%%i"
  12. )
  13. REM 统计 d:\123 内文件数量并赋值
  14. for /f "delims=" %%i in ('dir /b /a-d "!ph!\*.pdf"') do (
  15.      set /a m+=1
  16.      set "file_!m!=%%i"
  17. )
  18. REM 比较文件数量 这里 list.txt 的文件数少于d:\123文件数 就退出
  19. if !m! gtr !n! set str=!ph! 的文件数量与 list.txt 不符&goto :end
  20. for /l %%i in (1,1,!n!) do ren "!ph!\!file_%%i!" "!new_file_%%i!"
  21. set str=共计完成 "!ph!" 文件夹的 !n! 个文件的重命名
  22. :end
  23. echo;!str!
  24. pause
复制代码

TOP

回复 34# terse

TOP

我靠,没想到大佬直接做出来了,昨天刚刚学到了rem显示注解,#不显示注解,delims定义间隔符,dir识别,rech回显,大佬直接解决了我的需求,谢谢大佬,工地上的工作很累,我也有很多东西要学习处理,我觉着这次是个机会,我也有兴趣,这将决定我有机会要么走出工地,要么迅速进步,谢谢各位大佬

TOP

本帖最后由 小白唐唐 于 2023-3-14 00:46 编辑

回复 34# terse


    首先还是感谢大佬,我在测试的时候也发现两个问题,现在也已经解决,也在这里给大佬汇报一下,因为文件也不只是pdf文件,所以我修改了,删去了/*.pdf的限制,并增加时间排序的效果
for /f "delims=" %%i in ('dir /b /a-d /o:d  "!ph!"') do (
     set /a m+=1
     set "file_!m!=%%i"
其次,我发现每次只有list.txt的文件名数目少于要修改的文件时才会触发不一致的警告,我发现时比对!n!和!m!用的是gtr,所以我改成了neq,完美解决
但是也还有个疑问,当list.txt文件名比要修改的多且使用gtr的时候,文件夹名也会被修改,感觉是个bug,但我一直不太清楚是数目原因导致的




这个bug的照片都放在这里,供大佬看看

TOP

回复 37# 小白唐唐


   依照文件日期时间升序的顺序,列出新文件名到文本,再对文件进行重命名
  1. @echo off
  2. rem 将list.txt和批处理文件存放在同目录下  "D:\123\" 即文件目录
  3. cd /d "D:\123\"
  4. setlocal enabledelayedexpansion
  5. set /a n=0
  6. for /f "delims=" %%i in ('dir /b /a-d /o:d') do (
  7. set /a n=n+1,m=0
  8. for /f "delims=" %%a in ('type "%~dp0list.txt"') do (
  9. set /a m=m+1
  10. if !n! equ !m! (
  11. echo ren "%%i" "%%a"
  12. ren "%%i" "%%a"
  13. )
  14. )
  15. )
  16. endlocal
  17. pause
复制代码
bat小白,请多指教!谢谢!

TOP

回复 38# 77七


    七七大佬的程序也能运行,谢谢大佬。

TOP

回复 37# 小白唐唐


    哪位大佬能教教我为什么会有这个bug

TOP

回复 40# 小白唐唐


   我的代码也有问题吗?terse大佬的代码
  1. for /l %%i in (1,1,!n!) do ren "!ph!\!file_%%i!" "!new_file_%%i!"
复制代码


因为 !file_%%i! 这个变成空值了,所以把文件夹给重命名了
你试着把  !n!改成 !m! 试试,或者判断一下  !file_%%i!  这个是不是空值在重命名
不过你既然决定以这种方式重命名,命名之前可以看一下文本有多少行,文件有多少个,就不存在这些问题
bat小白,请多指教!谢谢!

TOP

谢谢77大佬,把!n!改成!m!后,启动次数的统计跟文件数目一样了,能完美解决这个bug,我感觉应该和运算次数有关,当运算次数大于或者文件数目时候,比如12次运算次数,等到结果是f12不存在,系统可能不会往下运行,所以就返回空值,和大佬说的一样

TOP

向高手们膜拜

TOP

回复 42# 小白唐唐
是的,疏忽了,开始确实用的neq判断不相等就退出,想到可能输入list不一定和实际文件数量相符,就用了GTR,
如果下面循环改N为M的话 应该也会有空值的出现
所以现在:
1,改判断那里可以gtr改为neq,两数不等就不去循环,
2,可先比较M和N, 然后选小的数进行循环;
2选1即可

TOP

回复 2# 77七


大佬,像这种john.txt改名用这个很好用,但是如果碰到1-john.txt,或者1-002-john.txt像这种,john在不同的位置的,要批量改名,这种有规律的在文件如何批量改名呢?

TOP

返回列表