Board logo

标题: [文本处理] BAT如何按要求批量重命名文件? [打印本页]

作者: ruoru376    时间: 2015-10-10 15:28     标题: BAT如何按要求批量重命名文件?

目录下有一子文件夹“文章”。里面有很多文件。需要对其批量改名,要求是在文件名最后(后缀名前)添加一个关键字。
比如:

关键词文件为:关键词.txt
关键词1
关键词2
关键词3
…………
关键词n
————————————————————
需改名 原文件名为:
A文章标题.txt
B文章标题.txt
C文章标题.txt
D文章标题.txt
…………
N文章标题.txt

改名后 新文件名为:
A文章标题【关键词1】.txt
B文章标题【关键词5】.txt
C文章标题【关键词3】.txt
…………
N文章标题【关键词n】.txt

————————
需改名 原文件有很多个,随机抽取"关键词.txt"里面的词或者循环使用,对文件进行改名,。希望大侠帮帮忙,谢谢了。
作者: flyinnet9    时间: 2015-10-10 16:56

本帖最后由 flyinnet9 于 2015-10-10 17:05 编辑

假设目录结构是这样的

一级目录
|
|___<文章>
|___bat
|___关键字.txt
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. ::设置关键字数量
  4. set num=50
  5. for %%a in (文章\*.txt) do (
  6.   set /a mod=!random!%%!num!
  7.   for /f %%b in ('more +!mod! 关键字.txt') do if not defined str set str=%%b
  8.   ren "%%a" "%%~na_!str!.txt"
  9.   set str=
  10. )
复制代码

作者: ruoru376    时间: 2015-10-10 17:30

回复 2# flyinnet9

效果不错。
不知道这个:关键词数量
set num=6
能不能自动获取呢!有多少词就是多少。不用指定……
——————
非常感谢 有时间!再研究研究吧!
作者: DAIC    时间: 2015-10-10 20:53

回复 3# ruoru376
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. ::获取关键字数量
  4. for /f %%a in ('type 关键字.txt^|find /c /v ""') do (
  5.     set "num=%%a"
  6. )
  7. for %%a in (文章\*.txt) do (
  8.   set /a mod=!random!%%!num!
  9.   for /f %%b in ('more +!mod! 关键字.txt') do if not defined str set str=%%b
  10.   ren "%%a" "%%~na_!str!.txt"
  11.   set str=
  12. )
复制代码

作者: ruoru376    时间: 2015-10-10 22:31

回复 4# DAIC


    谢谢!bat 效率还真慢啊!
作者: DAIC    时间: 2015-10-11 21:44

回复 5# ruoru376


总共多少个文件需要处理?
现在的代码需要多长时间处理完?
你希望多长时间处理完?
作者: ruoru376    时间: 2015-10-20 17:22

回复  ruoru376


总共多少个文件需要处理?
现在的代码需要多长时间处理完?
你希望多长时间处理完? ...
DAIC 发表于 2015-10-11 21:44


不好意思,这些天有些忙!没有来到论坛!
非常感谢!
2万个文件 耗费了 十多分钟啊!效率很低吧! 最好是1-3分钟就能处理完成就好了
作者: DAIC    时间: 2015-10-21 14:29

回复 7# ruoru376


试试这样需要几分钟
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set fileNum=0
  4. set keyNum=0
  5. REM 获取关键词数量
  6. for /f "delims=" %%i in ('type "关键词.txt"') do (
  7.     set /a keyNum+=1
  8.     set "_!keyNum!=%%i"
  9. )
  10. REM 重命名
  11. for %%i in (文章\*.txt) do (
  12.     set /a fileNum+=1
  13.     set /a mod=!fileNum!%%!keyNum!
  14.     if !mod! equ 0 (
  15.         set mod=3
  16.     )
  17.     for /f %%j in ("_!mod!") do (
  18.         ren "%%i" "%%~ni【!%%j!】%%~xi"
  19.     )
  20. )
复制代码

作者: ruoru376    时间: 2015-10-21 16:28

回复 8# DAIC
这个真的不错,效率是原来的4倍左右,谢谢了!




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2