标题: [文件操作] 批处理怎样根据关键字在文件名前加特定的前缀? [打印本页]
作者: ngb0519 时间: 2021-5-13 10:27 标题: 批处理怎样根据关键字在文件名前加特定的前缀?
因为工作原因,我经常收到很多汇总的excel或者word,也有图片什么的。
一般是这样的格式: 山东销售情况、上月广州销售情况、四川库存情况……。总之月底会收到很多,
为了方便起见,我设计了序号:比如山东是01、广州是02、四川是03……。
以前一直是手动修改为01.山东销售情况、02.上月广州销售情况、03.四川库存情况
目前,提出的问题是,能否等我收全文件。
批量根据文件中的关键字,在文件名前加特定的前缀。
就是想达到如下效果:
批处理前:山东销售情况、上月广州销售情况、四川库存情况
批处理后:01.山东销售情况、02.上月广州销售情况、03.四川库存情况
(也就是说在所有包含“山东”这个关键词的文件名,加“01.”的前缀;
在所有包含“广州”这个关键词的文件名,加“02.”的前缀;
期望,哪位大神抽空帮助解答一下
作者: rockjean 时间: 2021-5-13 11:30
回复 1# ngb0519
这个很简单哦,用重命名命令就可以了:
ren 山东*.* 01山东*.*
ren 广州*.* 02广州*.*
ren 四川*.* 03四川*.*
诸如此类,试验的时候可以先备份一下文件夹。
作者: ngb0519 时间: 2021-5-13 12:31
回复 2# rockjean
感谢大神的帮助,但是我运行了一下:
1、批处理前:库存表—山东.docx
2、批处理后:01山东东.docx
3、批处理文件是这样的:ren 山东*.* 01山东*.*
ren *山东.* 01山东*.*
4、运行后改变了原始文件名!我的想法是:如何在不改变原始文件名的前提下,根据文件名的关键词,在文件名前加特定前缀。
比如,
批处理前文件名是这样:山东销售情况
批处理后文件名是这样:01、山东销售情况
作者: newswan 时间: 2021-5-13 13:03
本帖最后由 newswan 于 2021-5-13 13:26 编辑
- @echo off
- setlocal enableDelayedExpansion
-
- set str=01 山东 02 四川
-
-
- call :f1 库存表-四川.docx %str%
- goto :END
-
- :f1
- if not "%2"=="" (
- echo %1 | findstr /r "^[^0-9]*%3" >nul
- if !errorlevel!==0 (
- echo %1 %2_%1
- goto :eof
- )
- shift /2 & shift /2
- goto :f1
- )
- goto :eof
-
- :END
复制代码
如果正确 把 echo 改成 ren
个人习惯,. 表示扩展名, 文件名中用 - _
作者: ngb0519 时间: 2021-5-13 13:27
回复 4# newswan
感谢帮助,但是 运行下来,不行
作者: rockjean 时间: 2021-5-13 13:50
回复 5# ngb0519
你的意思是把所有含山东关键字的文件,全部在前面加编号01,含有广州的文件,加编号02,含有四川的文件,加编号03,这个意思吧?
作者: newswan 时间: 2021-5-13 13:52
回复 newswan
感谢帮助,但是 运行下来,不行
ngb0519 发表于 2021-5-13 13:27
- @echo off
- chcp 936
- setlocal enableDelayedExpansion
-
- set str=01 山东 02 四川
-
- for /f "usebackq tokens=* delims=" %%a in (` dir /b *.docx `) do (
- call :f1 "%%a" %str%
- )
- goto :END
-
- rem %0 %str% index
- :f1
- if not "%2"=="" (
- echo %1 | findstr /r "^[^0-9]*%3" >nul
- if !errorlevel!==0 (
- echo "%~1" "%2_%~1"
- goto :eof
- )
- shift /2 & shift /2
- goto :f1
- )
- goto :eof
-
- :END
复制代码
作者: ngb0519 时间: 2021-5-13 14:32
回复 6# rockjean
是的,但是不能改表原始文件名,只是在原始文件名前面加前缀。这个前缀按照规则,比如01.山东;02.广州,
作者: ngb0519 时间: 2021-5-13 14:41
回复 7# newswan
非常感谢,但是运行还是不成功。
作者: newswan 时间: 2021-5-13 16:06
当前目录下运行正确,已测试
子目录 其他目录 自己修改一下
作者: qixiaobin0715 时间: 2021-5-13 17:29
本帖最后由 qixiaobin0715 于 2021-5-13 21:42 编辑
未经测试- @echo off
- set var=山东 广州 四川
- setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('dir /b /s /a-d') do (
- set "str=%%~na"
- set n=0
- for %%a in (%var%) do (
- set /a n+=1
- if not "!str!"=="!str:%%a=!" ren "%%a" "0!n!.!str!%%~xa"
- )
- )
- pause
复制代码
作者: hlzj88 时间: 2021-5-13 19:07
本帖最后由 hlzj88 于 2021-5-13 19:53 编辑
改2楼
ren *山东* 01*山东*
ren *广州* 02*广州*
ren *四川* 03*四川*
其他类推
经测试,不明白为什么被重命名的文件名相对原文件会丢失原文件头两个字符。
作者: qixiaobin0715 时间: 2021-5-13 20:16
回复 12# hlzj88
ren命令中可使用*和?但只能替换不能增加字符。
作者: qixiaobin0715 时间: 2021-5-13 20:24
ren通配符用法参见http://www.bathome.net/thread-2171-1-1.html
作者: newswan 时间: 2021-5-13 21:11
应该有个判断:前面没序号,添加序号
作者: qixiaobin0715 时间: 2021-5-13 22:05
本帖最后由 qixiaobin0715 于 2021-5-14 06:25 编辑
回复 15# newswan
接受建议重新修改代码:
1.文件名开头是数字不再重命名。
2.对关键词超过10个时进行修正,前面添加的数字还是两位(01、02、03...10、11...)。
3.修改代码时,发现11楼代码有误,已修改。- @echo off
- set var=山东 广州 四川
- setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('dir /b /s /a-d') do (
- set "str1=%%~na"
- set n=100
- for /f "tokens=* delims=0123456789" %%i in ("!str1!") do set "str2=%%i"
- for %%j in (%var%) do (
- set /a n+=1
- if not "!str1!"=="!str1:%%j=!" if "!str1!"=="!str2!" ren "%%a" "!n:~1!.!str1!%%~xa"
- )
- )
- pause
复制代码
作者: ngb0519 时间: 2021-5-13 22:59
回复 10# newswan
非常感谢,但是运行还是不成功。
能否将你的测试包发给我,试一下
作者: ngb0519 时间: 2021-5-13 23:02
回复 16# qixiaobin0715
刚测试了一下,没有用
作者: newswan 时间: 2021-5-14 00:21
本帖最后由 newswan 于 2021-5-14 00:31 编辑
回复 17# ngb0519
http://www.bathome.net/viewthrea ... hlight=%B5%F7%CA%D4
发不了附件,邮箱?
作者: qixiaobin0715 时间: 2021-5-14 06:29
本帖最后由 qixiaobin0715 于 2021-5-14 06:35 编辑
回复 18# ngb0519
16楼代码出了点小状况,已修改并测试成功。
使用前必须将批处理文件保存为ANSI编码
作者: rockjean 时间: 2021-5-14 08:41
回复 12# hlzj88
我这个只能改以关键字开头的文件名,要是关键字不在前面的,在中间或是其它地方的,就改不了了。比如:文件名为“广州上月报表.docx”,可以批处理为“01.广州上月报表.docx”,
要是文件名为“上月广州的报表.docx”,这种的就改不了滴。思路就是,把文件名提出来,一行一行分析,凡是哪行有指定关键字的,就在该行前面加指定编号。
作者: ngb0519 时间: 2021-5-14 09:40
回复 19# newswan
感谢大神的关心,我的邮箱是:ngb0519@163.com。
再次感谢
作者: ngb0519 时间: 2021-5-14 14:11
回复 20# qixiaobin0715
刚才测试了一下,大神你的代码,非常神奇啊!
有用,以后我要多向你请教喽!
千万不要嫌弃啊!
作者: qixiaobin0715 时间: 2021-5-14 14:28
一起学习,共同进步
作者: rockjean 时间: 2021-5-15 14:42
@echo off
Setlocal Enabledelayedexpansion
for /f %%i in ('dir /b *.*') do (
if str keyword=广州 ren %%i 01%%i
if str keyword=山东 ren %%i 02%%i
if str keyword=四川 ren %%i 03%%i
)
exit
整体的思路是这个样子的,具体的代码,还请其他大神优化一下,这个应该可以满足楼主的需求。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |