Board logo

标题: [文本处理] 批处理能匹配多个字符进行重命名吗? [打印本页]

作者: myacg    时间: 2020-7-14 08:54     标题: 批处理能匹配多个字符进行重命名吗?

一个脑洞:文件夹有几百个文件,文件名都是不同的。
比如:文件今天录音采访  小李配音素材a 明天任务日志abc .......等。然后有一个文本文档TXT把文件名排序好了,但文件名有点不同
比如: 01.文件今天录音  02.小李配音素材aa 03.明天任务日志EFG......
大概有五个字符匹配就开始重命名,达不到就不处理。优先处理匹配最多的。求这个批处理写法。谢谢先。
作者: smss    时间: 2020-7-14 12:29

本帖最后由 smss 于 2020-7-14 17:17 编辑

下面例子JPG文件格式改成你的格式 以ANSI编码保存为CMD或BAT运行 n和m是取字符范围 根据自身需要调整
  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "delims=" %%i in ('dir/b/s *.jpg')do set "m=%%~ni"&set/p "n="&echo if defined n if "!n:~3,3!"=="!m:~0,3!" ren "%%i" "!n!%%~xi")<aaa.txt
  3. pause
复制代码

作者: myacg    时间: 2020-7-14 17:01

回复 2# smss

好像没有效果
作者: smss    时间: 2020-7-14 17:16

回复 3# myacg 改了你再试试 回显正确删除第二行echo
作者: myacg    时间: 2020-7-14 17:42

回复 4# smss

好像还是不行,看截图。已经是VANSI编码了。
作者: Batcher    时间: 2020-7-14 18:29

回复 1# myacg


    需要重命名的文件是什么格式的呢,jgp图片文件?mp3音频文件?
作者: myacg    时间: 2020-7-14 19:25

回复 6# Batcher
基本上是txt和MP4文件,稿件和视频。
作者: ivor    时间: 2020-7-14 20:11

本帖最后由 ivor 于 2020-7-14 21:06 编辑
  1. #! /usr/bin/env python3.8
  2. # -*- coding:utf-8 -*-
  3. """
  4. 匹配多个字符进行重命名
  5. 最少五个字符匹配才重命名,优先处理匹配最多的
  6. """
  7. import os
  8. import shutil
  9. def get_max_repeat(txt_data="", filename_list=[], min=5):
  10.     """
  11.     :param txt_data:遍历 文本文档.TXT 比如: 01.文件今天录音  02.小李配音素材aa 03.明天任务日志EFG......
  12.     :param filename_list:当前文件夹下的所有文件包括文件夹
  13.     :param min:最小重复字符包括 「文件名后缀」
  14.     :return:当前文件夹下和txt_data名称匹配最多的文件名
  15.     """
  16.     tmp = dict()
  17.     for f in filename_list:
  18.         if repeat_num := len(set(txt_data) & set(f)) >= min:
  19.             tmp[f] = repeat_num
  20.     if len(tmp) != 0:
  21.         return sorted(tmp.items(), key=lambda x: x[1], reverse=True)[0][0]
  22.     else:
  23.         return None
  24. with open('文本文档.TXT', 'rt') as file:
  25.     txt_data = file.readlines()
  26.     file_name = os.listdir('.')
  27.     for i in txt_data:
  28.         i = i.strip('\n\r ')
  29.         if (result := get_max_repeat(txt_data=i, filename_list=file_name)) is not None:
  30.             print("文件:{}  改名为:{}".format(result, i+os.path.splitext(result)[-1]))
  31.             # shutil.move(result,i)
复制代码
/usr/local/bin/python3.8 /Users/mac/Desktop/script/test.py
文件:文件今天录音采访  改名为:01.文件今天录音
文件:小李配音素材a  改名为:02.小李配音素材aa
文件:明天任务日志abc.jpg  改名为:03.明天任务日志EFG.jpg
Process finished with exit code 0


如果运行正确,取消注释最后一行# shutil.move(result,i)
作者: myacg    时间: 2020-7-14 22:19

回复 8# ivor

这个不是批处理吧,不会用。。。还是想要bat
作者: myacg    时间: 2020-7-15 12:37

本帖最后由 myacg 于 2020-7-15 13:55 编辑

继续等高人
作者: myacg    时间: 2020-7-15 13:59

本帖最后由 myacg 于 2020-7-15 15:16 编辑

命名还是按txt里的顺序来的。为什么???
  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "delims=" %%i in ('dir/b/s *.jpg') do (
  3.     set "m=%%~ni"&set /p "n="&echo if defined n if "!n:~3,3!"=="!m:~0,3!"
  4.     ren "%%i" "!n!%%~xi"  
  5. ))<1.txt
  6. pause
复制代码

作者: smss    时间: 2020-7-16 20:39

回复 11# myacg
把 jpg改成你的格式 不然怎么可能获取
作者: myacg    时间: 2020-7-16 23:24

回复 12# smss
就是JPG啊!




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