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

[文件操作] 请教老师们,批量改名的BAT如何实现?

[复制链接]
发表于 2023-3-11 23:45:00 | 显示全部楼层 |阅读模式
D盘AAA目录下有N个文件,如,原文件名为:john.txt ,TXT文本中整理好的新名称1-001-john.txt,新文件名是包含原文件名的,
新名称已经整理好TXT文本格式,如何通过BAT处理,使AAA目录下的所有文件自动改成txt文本中定义的新文件名?
或者这份新文件名不用单独的TXT存放新文件名,直接写到BAT中。
请老师们赐教,谢谢。
发表于 2023-3-12 00:25:57 | 显示全部楼层
本帖最后由 77七 于 2023-3-12 00:40 编辑
  1. @echo off
  2. cd /d "D:\AAA"
  3. for /f "delims=" %%i in ('dir /b /a-d ') do (
  4.         for /f "delims=" %%a in ('type "%~f0" ^| find "%%~nxi"') do (
  5.                 echo ren "%%i" "%%a"
  6.                 ren "%%i" "%%a"
  7.         )
  8. )
  9. pause
  10. exit
  11. :以下存放新名
  12. 1-001-john.txt
复制代码
 楼主| 发表于 2023-3-12 01:44:44 | 显示全部楼层
运行完美,感谢老师
发表于 2023-3-12 09:09:18 | 显示全部楼层
回复 3# image1001


    如果新文件名都是在老文件名的基础上按照指定规律得来的,那么你不必手工准备那个新文件名列表,可以全部交给BAT代码一步到位。
 楼主| 发表于 2023-3-12 12:05:45 | 显示全部楼层
是的,都是在老文件名上有规律的,直接用上面的代码将文件名写入BAT就完美解决了。
发表于 2023-3-12 13:06:26 | 显示全部楼层
回复 2# 77七
大佬,如果不是txt文件该改什么地方呀
发表于 2023-3-12 13:20:00 | 显示全部楼层
回复 6# 小白唐唐


    没有限制为txt文件,txt文件只是顶楼举的例子

除了文件夹外的任意带扩展名的文件都可以(不和代码冲突就好,比如一个文件没有扩展名 名为 "for" 就和代码冲突了)
发表于 2023-3-12 14:45:22 | 显示全部楼层
回复 2# 77七

大佬,我试了下,怎么用不了
发表于 2023-3-12 14:49:55 | 显示全部楼层
回复 8# 小白唐唐
    @echo off
cd /d "D:\123\"
for /f "delims=" %%i in ('dir /b /a-d /o:d') do (
        for /f "delims=" %%a in ('type "%~f0" ^| find "%%~nxi"') do (
                echo ren "%%i" "%%a"
                ren "%%i" "%%a"
        )
)
pause
exit:
121231.txt

我只添加了个时间顺序,感觉ren "%%i" "%%a"有点多余,但是就是运行不来
发表于 2023-3-12 14:50:34 | 显示全部楼层
回复 9# 小白唐唐


    不是多余,是多了
发表于 2023-3-12 14:53:56 | 显示全部楼层
回复 10# 小白唐唐


    但是只是我个人感觉
发表于 2023-3-12 15:03:36 | 显示全部楼层
回复 8# 小白唐唐
检查你的文件名中是否含有121231
还有你这样会有文件重复的可能
发表于 2023-3-12 15:45:15 | 显示全部楼层
回复 12# terse


   没有的,我找了21个pdf文件试了试
发表于 2023-3-12 15:49:36 | 显示全部楼层
回复 13# 小白唐唐


    @echo off
cd /d "D:\123\"
for /f "delims=" %%i in ('dir /b /a-d/o:d ') do (
        for /f "delims=" %%a in ('type "%~f0" ^| find "%%~nxi"') do (
                echo ren "%%i" "%%a"
                ren "%%i" "%%a"
        )
)
pause
exit

11.pdf
12.pdf
13.pdf
14.pdf
15.pdf
16.pdf
17.pdf
18.pdf
19.pdf
20.pdf
21.pdf
22.pdf
23.pdf
24.pdf
25.pdf
26.pdf
27.pdf
28.pdf
29.pdf
30.pdf
31.pdf
32.pdf
33.pdf
34.pdf
35.pdf
36.pdf
37.pdf
38.pdf
发表于 2023-3-12 16:27:27 | 显示全部楼层
回复 14# 小白唐唐


   实际文件名呢?如果是单纯的测试验证代码,尽量保证新旧名称11对应吧,不要存在交叉、命名后重复什么的,看到你罗列的11.pdf 21.pdf ,两者只有 第一位数字是不同的,原来的文件名只能是11.p  21.pd之类的了,有点不符合实际。如果是实际需求,可以另开贴询问,感觉你和楼主的需求有点出入。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 01:15 , Processed in 0.021754 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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