视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
bat和python批量重命名文件的实现
2020-11-27 14:26:11 责编:小采
文档

最近从某网站下载了一批文档,但是文件是用数字串命名的文档(很多图书馆都这样吧),现在我也下载完了这些文件,也有这些文件的列表,就是不能一个一个的把文件给重命名吧所以从网上找了这几个脚本。

一、使用bat脚本(windows系统默认可用)

打开记事本,将这些代码写入记事本,另存为xx.bat文件(注意后缀名,很多小白保存成了xx.bat.txt,因为txt是隐藏的,以为不行)

@echo off
for /r “d:pdf” %%a in (*.pdf) do (
 for /f “tokens=1,2 delims= ” %%b in (1.txt) do ( 
 if “%%~nxa”==”%%b” ren “%%a” “%%c.pdf”
 )
)

要求文件放在d:/pdf文件夹下,文件后缀为.pdf,文件列表放在1.txt下面,txt保存为微软下的默认ANSI格式就好,内部内容格式为以下格式:

ts001003.pdf 世界科技全景百卷书(3)近代科技
ts001004.pdf 世界科技全景百卷书(4)蒸汽机带来的
ts001005.pdf 世界科技全景百卷书(5)现代科技

有需要的可以适当修改。


二、使用python脚本(windows系统需安装python 3.50 编译软件,约30M,linux估计需要升级python到3.50)

这个脚本是我花了好几个小时写的一个脚本(虽然学了好久编程,但是要流畅的写一个比较好的还是不顺手)
打开记事本,将这些代码写入记事本,另存为xx.bat文件(注意后缀名,很多小白保存成了xx.bat.txt,因为txt是隐藏的,以为不行)

#!/bin/env python
# -*- coding: utf-8 -*-
"""从某网站下载了一批文档,但是文件是用数字串命名的文档(很多图书馆都这样吧),
也有文档列表,所以写了一个脚本来重命名批文件

"""
__author__ = 'rublog'
import os

#1.txt文档要求每个文档一行,保存的时候必须为ANSI格式,前面是列表文档名含后缀(就是网站上文件名,一串数字
#或者字母什么的),空一格,然后是文档的真名(不带后缀)
#get_list这个从1.txt文本文件中一行一行的读取文件,去掉换行符,然后调用doc_rename
#函数
def get_list():
 #尝试不同的编码来自知乎 十五
 #http://www.gxlcms.com/
 decode_list=["utf-8",'gb18030', 'ISO-8859-2','gb2312',"gbk","Error" ]#编码集
 #GBK不如GB18030覆盖得好,容易出错,故首先尝试GB18030。
 for k in decode_list:#编码集循环
 try:
 book_list = open('1.txt', encoding=k)
 #打开路径中的文本
 line = book_list.readline()
 while line:
 if os.name == 'nt':
 line = line.strip('
')
 else:
 line = line.strip('
')
 doc_rename(line)
 line = book_list.readline()
 break#打开路径成功跳出编码匹配
 except:
 if k == "Error":#如果碰到这个程序终止运行
 print("had no way to decode")
 raise Exception("%s had no way to decode"%directions)
 continue
#重命名,构造完整的路径和后缀
def doc_rename(book_list_line):
 try:
 name_list = book_list_line.split(' ')
 list_name = name_list[0]
 cool_list = list_name.split('.')
 ext = cool_list[-1]
 current_folder = os.getcwd()
 real_name = name_list[1]
 real_name = os.path.join(current_folder, real_name)
 real_name_ext = real_name+'.'+ext
 os.rename(os.path.join(current_folder, list_name), real_name_ext)
 print('success')
 except:
 pass
 return 0
#据说高手都会写的主函数
if __name__ == '__main__':
 get_list()

要求文件放在普通文件夹下,文件后缀可以任意(后缀要和txt内的列表后缀一样),文件列表放在1.txt下面,txt保存为微软下的默认ANSI格式或者UTF无BOM格式就好,内部内容格式为以下格式:

ts001003.pdf 世界科技全景百卷书(3)近代科技

ts001004.pdf 世界科技全景百卷书(4)蒸汽机带来的

ts001005.pdf 世界科技全景百卷书(5)现代科技


1.txt文档要求每个文档一行,保存的时候必须为ANSI或者UTF无BOM格式,其他格式没事测试,

前面是列表文档名含后缀(就是网站上文件名,一串数字#或者字母什么的),空一格,然后是文档的真名(不带后缀)

更多bat和python批量重命名文件的实现相关文章请关注PHP中文网!

下载本文
显示全文
专题