最近从某网站下载了一批文档,但是文件是用数字串命名的文档(很多图书馆都这样吧),现在我也下载完了这些文件,也有这些文件的列表,就是不能一个一个的把文件给重命名吧所以从网上找了这几个脚本。
一、使用bat脚本(windows系统默认可用)
打开记事本,将这些代码写入记事本,另存为xx.bat文件(注意后缀名,很多小白保存成了xx.bat.txt,因为txt是隐藏的,以为不行)
1
2
3
4
5
6
|
@ 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是隐藏的,以为不行)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
#!/bin/env python # -*- coding: utf-8 -*- """从某网站下载了一批文档,但是文件是用数字串命名的文档(很多图书馆都这样吧), 也有文档列表,所以写了一个脚本来重命名批文件 """ __author__ = 'rublog' import os #1.txt文档要求每个文档一行,保存的时候必须为ANSI格式,前面是列表文档名含后缀(就是网站上文件名,一串数字 #或者字母什么的),空一格,然后是文档的真名(不带后缀) #get_list这个从1.txt文本文件中一行一行的读取文件,去掉换行符,然后调用doc_rename #函数 def get_list(): #尝试不同的编码来自知乎 十五 #https://www.zhihu.com/question/30070752/answer/46684320 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( '\r\n' ) else : line = line.strip( '\n' ) 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格式,其他格式没事测试,
前面是列表文档名含后缀(就是网站上文件名,一串数字#或者字母什么的),空一格,然后是文档的真名(不带后缀)
为方便大家使用特提供打包下载:
•读取txt重命名列表文件.zip