标题: [文件操作] 求做一个能批量改文件名的BAT脚本,谢谢。 [打印本页]
作者: dzwind 时间: 2024-5-30 16:40 标题: 求做一个能批量改文件名的BAT脚本,谢谢。
本帖最后由 dzwind 于 2024-5-30 21:45 编辑
求做一个BAT,要求通过拖拽的方式将文件夹里所有的doc及docx重命名,重命名为取源文件名中第一个出现的数字及文件名中间或者最后面的字符(1个或者几个都行)。
举例说明:
比如:文件夹下有以下文件
1abcdef.doc
a2aaaa.docx
b3bbbb.doc
4ddddd.docx
我想通过bat的形式,将文件重命名为11111F.doc;2222a.docx;3333b.doc;4444d.docx。
目的是文件的顺序一目了然。
谢谢。
作者: 77七 时间: 2024-5-30 17:46
这样命名有什么意义吗?而且确定不会产生重名吗?
作者: dzwind 时间: 2024-5-30 17:54
回复 2# 77七 谢谢您
作者: aloha20200628 时间: 2024-5-30 18:34
回复 1# dzwind
复述一遍更名规则须楼主确认》新文件名由首部和尾部构成,尾部是源文件名首次出现的数字及源文件名最后一个字符,首部是源文件名首次出现的数字重复3遍
作者: Five66 时间: 2024-5-30 18:39
什么是
取文件名中第一个出现的数字及数字最后面的一个字符
完全看不懂
作者: czjt1234 时间: 2024-5-30 20:08
为什么是5个1而不是4个1
作者: dzwind 时间: 2024-5-30 20:54
本帖最后由 dzwind 于 2024-5-30 21:04 编辑
回复 4# aloha20200628
目标文件名是由第1个数字(重复几遍),再加上源文件名中的任意字符即可,这样可避免有重名文件。
目的是1、让我能一目了然看清文件名的顺序。2、简短文件名的长度。
因为我处理的文件有的文件名太长,前面的数字看不清。
作者: dzwind 时间: 2024-5-30 20:58
回复 6# czjt1234
几个重复的数字都行。目的是多写几个能够让我看清文件名,知道文件的顺序。
作者: 77七 时间: 2024-5-30 23:07
回复 7# dzwind
- @echo off
- if "%~1" equ "" (
- exit
- ) else (
- pushd "%~1" || exit
- )
- for /f "delims=" %%i in ('dir /b /a-d "*.doc?"') do (
- set n=%%~ni
- set x=%%~xi
- for /f "tokens=1 delims=0123456789" %%a in ("\%%~ni") do (
- set _n=\%%~ni
- setlocal enabledelayedexpansion
- for /f "delims=" %%b in ("!_n:%%a=!") do (
- endlocal
- set nn=%%b
- setlocal enabledelayedexpansion
- ren "!n!!x!" "!nn:~0,1!!nn:~0,1!!nn:~0,1!!nn:~0,1!_!n:~-2!!x!"
- endlocal
- )
- )
- )
- pause
复制代码
作者: aloha20200628 时间: 2024-5-30 23:13
回复 7# dzwind
假设拖入的是一个目标文件夹
代码第5行中的数字3是源文件名第一个数字的重复次数,可由楼主自定义
- @echo off & if "%~1"=="" exit/b
- pushd "%~1" &setlocal enabledelayedexpansion
- for /f "delims=" %%F in ('dir /b/a-d *.doc* 2^>nul') do (
- set "docF=%%~nF"&set "nc="&(call :get_n docF n)
- for /L %%n in (1,1,3) do set "nc=!nc!!n!"
- ren "%%F" "!nc!!n!!docF:~-1!%%~xF"
- )
- popd&pause&exit/b
- :get_n
- set "s=!%~1!"
- :[loop]
- set "c=!s:~,1!"&if "!c!" geq "0" if "!c!" leq "9" (set "%~2=!c!"&exit/b)
- set "s=!s:~1!"&if "!s!"=="" (exit/b) else goto[loop]
复制代码
作者: buyiyang 时间: 2024-5-30 23:33
回复 9# 77七
其实只要用 dir /b /a-d "*.doc" 就行,
因为通配符模式匹配文件名时后缀为3个字母即可兼容4个字母以上的后缀,这应该是从 dos 时代“8+3”文件名模式延续下来的
作者: 77七 时间: 2024-5-30 23:46
回复 11# buyiyang
谢谢大佬指点!
以前看过老帖 包括置顶贴 不能说的秘密 ,都有提及这个事,但是在我电脑上,行不通,不知道咋回事。
- D:\>cd.>1.docx
-
- D:\>dir /b /a-d *.doc
- 找不到文件
-
- D:\>dir /b /a-d *.docx
- 1.docx
复制代码
作者: newswan 时间: 2024-5-31 08:23
第1个数字(重复几遍),再加上源文件名中的任意字符
很可能重名
作者: dzwind 时间: 2024-5-31 08:53
作者: holley 时间: 2024-5-31 09:50
回复 1# dzwind
数字总共就0-9,,再接不管什么字符、几个字符,,重名的几率非常大,使用脚本的后果就是文件被覆盖或丢失。
如果单纯是觉得文件名太长,还不如看下规律提取一个前缀或者缩减名称长度,,最好直接用个改名工具。
作者: buyiyang 时间: 2024-5-31 12:16
回复 12# 77七
你用的什么系统,什么版本?
for %%i in (*.doc) do echo,%%i 可以展开匹配吗?
作者: 77七 时间: 2024-5-31 13:01
回复 16# buyiyang
win10,
- Microsoft Windows [版本 10.0.19041.450]
- (c) 2020 Microsoft Corporation. 保留所有权利。
-
- D:\>cd.>1.docx&cd.>2.doc
-
- D:\>for %i in (*.doc) do echo %i
-
- D:\>echo 2.doc
- 2.doc
复制代码
作者: buyiyang 时间: 2024-5-31 14:24
回复 17# 77七
你这个D盘是什么文件系统,exFAT系统对文件名的匹配会有不同。
作者: 77七 时间: 2024-5-31 15:01
回复 18# buyiyang
NTFS。这些小问题不影响使用。
作者: buyiyang 时间: 2024-5-31 16:37
回复 19# 77七
应该与分区和文件系统有关,exFat不行,FAT、FAT16、FAT32可以,磁盘管理器和diskpart分区格式化为NTFS不行,用diskgenius却可以。
作者: 77七 时间: 2024-5-31 17:11
回复 20# buyiyang
谢谢大佬指点!我试着格式化为fat32,dir成功了。- D:\>cd.>1.docx
-
- D:\>dir /b /a-d *.doc
- 1.docx
复制代码
另外还有一点发现,如另一个帖子中提到的dir /x ,以前我这也是失败的,不显示短名也不报错,现在也成功显示短名了。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |