标题: [文件操作] 【已解决】批处理如何在一堆文件名前面加上序列号? [打印本页]
作者: rockjean 时间: 2021-10-13 21:45 标题: 【已解决】批处理如何在一堆文件名前面加上序列号?
本帖最后由 rockjean 于 2021-10-27 11:01 编辑
现有一堆不规则的文件,大约3000多个,为了规范管理,想以序列号+原文件名的形式,对文件进行重新命名,不知道用批处理怎么才能实现呢?
比如,原文件名是这样子的 “SMBK4569|彩色瓦楞盒|360×250×170mm|工程图.pdf” ,加上序列号,变成 “RJ001|SMBK4569|彩色瓦楞盒|360×250×170mm|工程图.pdf” ,
以此类推,原文件名不变,RJ001开始变化,RJ002,RJ003,如此顺延~
请问诸位大神,这样的批处理命令该怎么写呢?
作者: Batcher 时间: 2021-10-13 21:51
回复 1# rockjean - @echo off
- setlocal enabledelayedexpansion
- cd /d "%~dp0"
- set n=1000
- for /f "tokens=1* delims=|" %%i in ('dir /b /a-d *.pdf') do (
- set /a n+=1
- ren "%%i|%%j" "RJ!n:~1!|%%j"
- )
复制代码
作者: rockjean 时间: 2021-10-13 21:52
本帖最后由 rockjean 于 2021-10-13 21:54 编辑
原文件名 处理后的文件名
8769088|黑白说明书|210×285mm|工程图.pdf RJ001|8769088|黑白说明书|210×285mm|工程图.pdf
SK9087|海报三折页|280×420mm|工程图.pdf RJ002|SK9087|海报三折页|280×420mm|工程图.pdf
……
作者: rockjean 时间: 2021-10-13 21:55
回复 2# Batcher
这么快就有大神出现了,非常感谢,明天上班我试验一下。thank you very much!
作者: dos大帝 时间: 2021-10-14 14:30
对2楼代码的解释:
- 05和07行代码里的 | , ansi或utf8编码下直接运行会报错, 建议将脚本文件用GBK编码, 然后直接用你文件名中的替换
- 代码会将文件“SMBK4569|彩色瓦楞盒|360×250×170mm|工程图.pdf”换成"RJ001|彩色瓦楞盒|360×250×170mm|工程图.pdf”, 第一个|前的字符被替换, 似乎和目的不符
- 代码只针对当前目录的文件, 不包含文件夹, 也不包含子文件夹, 且只针对后缀为pdf的文件
作者: qixiaobin0715 时间: 2021-10-14 14:41
回复 5# dos大帝
此|非彼|也。
作者: dos大帝 时间: 2021-10-14 15:23
回复 6# qixiaobin0715
就是这个原因会报错, |应该是个表情符, 具体得看楼主
作者: qixiaobin0715 时间: 2021-10-14 15:34
我这里测试没有出错。
你说的后两点是对的。
作者: Batcher 时间: 2021-10-14 17:21
回复 3# rockjean
2楼代码没看清楼主需求,请测试这个代码:- @echo off
- setlocal enabledelayedexpansion
- cd /d "%~dp0"
- set n=1000
- for /f "delims=" %%i in ('dir /b /a-d *.pdf') do (
- set /a n+=1
- ren "%%i" "RJ!n:~1!|%%i"
- )
复制代码
作者: rockjean 时间: 2021-10-17 16:59
回复 9# Batcher
现在产生了一个新的需求,因为一天的时间有限,只更新了500多个文件名,剩下的过些日子再更新,如何从501的序号开始更改呢?
作者: Batcher 时间: 2021-10-17 17:05
回复 10# rockjean
9楼代码第4行改成:
set n=1500
作者: aloha20200628 时间: 2021-10-20 13:37
楼主有兴趣可以试试这段代码:
@echo off
set "pathF="
set/p pathF="从资源管理器拖入或键入一个目标目录:"
if not defined pathF exit
set tmpF="_tmpFile_"
dir /s/b/a-d %pathF%\*.txt > %tmpF%
setlocal enabledelayedexpansion
set/a n=0
for /f "usebackq delims=" %%F in (%tmpF%) do (
set/a n+=1
set "pf=RJ!n!"
if !n! lss 10 (set "pf=RJ000!n!") else (if !n! lss 100 (set "pf=RJ00!n!") else (if !n! lss 1000 (set "pf=RJ0!n!")))
ren "%%F" "!pf!|%%~nxF"
)
del /q %tmpF%
endlocal & exit
作者: aloha20200628 时间: 2021-10-20 13:40
当目录文件上千或更多时,采用dir>临时文件替代for...in ('dir...') 会明显提速。
作者: aloha20200628 时间: 2021-10-20 13:43
抱歉...代码中的.txt应该改成楼主指定的.pdf
作者: aloha20200628 时间: 2021-10-20 17:52
翻了翻以前的笔记,有个更省事的技法来格式化补零字符串,而且有通用性(读者一看即得),用在本例中的代码如下:
set "pf=RJ000!n!"
set "pf=!pf:~-4!"
替换我在12楼原来的代码段:
set "pf=RJ!n!"
if !n! lss 10 (set "pf=RJ000!n!") else (if !n! lss 100 (set "pf=RJ00!n!") else (if !n! lss 1000 (set "pf=RJ0!n!")))
作者: aloha20200628 时间: 2021-10-20 17:56
抱歉有个笔误,更正如下:
set "pf=000!n!"
set "pf=RJ!pf:~-4!"
作者: rockjean 时间: 2021-10-27 10:59
回复 9# Batcher
经过测试,这个代码可行!非常感谢batcher大神的支持。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |