bat和python批量重命名文件的实现代码
最近从某网站下载了一批文档,但是文件是用数字串命名的文档(很多图书馆都这样吧),现在我也下载完了这些文件,也有这些文件的列表,就是不能一个一个的把文件给重命名吧所以从网上找了这几个脚本。
一、使用bat脚本(windows系统默认可用)
打开记事本,将这些代码写入记事本,另存为xx.bat文件(注意后缀名,很多小白保存成了xx.bat.txt,因为txt是隐藏的,以为不行)
@echooff for/r“d:\pdf”%%ain(*.pdf)do( for/f“tokens=1,2delims=”%%bin(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系统需安装python3.50编译软件,约30M,linux估计需要升级python到3.50)
这个脚本是我花了好几个小时写的一个脚本(虽然学了好久编程,但是要流畅的写一个比较好的还是不顺手)
打开记事本,将这些代码写入记事本,另存为xx.bat文件(注意后缀名,很多小白保存成了xx.bat.txt,因为txt是隐藏的,以为不行)
#!/bin/envpython
#-*-coding:utf-8-*-
"""从某网站下载了一批文档,但是文件是用数字串命名的文档(很多图书馆都这样吧),
也有文档列表,所以写了一个脚本来重命名批文件
"""
__author__='rublog'
importos
#1.txt文档要求每个文档一行,保存的时候必须为ANSI格式,前面是列表文档名含后缀(就是网站上文件名,一串数字
#或者字母什么的),空一格,然后是文档的真名(不带后缀)
#get_list这个从1.txt文本文件中一行一行的读取文件,去掉换行符,然后调用doc_rename
#函数
defget_list():
#尝试不同的编码来自知乎十五
#https://www.zhihu.com/question/30070752/answer/46684320
decode_list=["utf-8",'gb18030','ISO-8859-2','gb2312',"gbk","Error"]#编码集
#GBK不如GB18030覆盖得好,容易出错,故首先尝试GB18030。
forkindecode_list:#编码集循环
try:
book_list=open('1.txt',encoding=k)
#打开路径中的文本
line=book_list.readline()
whileline:
ifos.name=='nt':
line=line.strip('\r\n')
else:
line=line.strip('\n')
doc_rename(line)
line=book_list.readline()
break#打开路径成功跳出编码匹配
except:
ifk=="Error":#如果碰到这个程序终止运行
print("hadnowaytodecode")
raiseException("%shadnowaytodecode"%directions)
continue
#重命名,构造完整的路径和后缀
defdoc_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
return0
#据说高手都会写的主函数
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