首頁  >  文章  >  後端開發  >  bat和python批量重命名檔案的實現

bat和python批量重命名檔案的實現

高洛峰
高洛峰原創
2017-03-02 16:18:381620瀏覽

最近從某網站下載了一批文檔,但是文件是用數字串命名的文檔(很多圖書館都這樣吧),現在我也下載完了這些文件,也有這些文件的列表,就是不能一個一個的把檔案為重命名吧所以從網路上找了這幾個腳本。

一、使用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.php.cn/
  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格式,其他格式沒事測試,


前面是清單文件名含後綴(就是網站上文件名,一串數字#或字母什麼的),空一格,然後是文件的真名(不含後綴)


更多bat與python批次重命名檔的實作相關文章請關注PHP中文網!


#

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn