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

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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