原文出处:http://www.cnblogs.com/pzxbc/archive/2012/03/17/2404060.html
1 #!\usr\bin\env python 2 # -*- coding: utf-8 -*- 3 # Author: PZX 4 # FileName: batchrename.py 5 # Function: 批量命名某一文件夹下的文件名 6 7 import sys 8 import os 9 10 def UsePrompt(): 11 #如果省略path,则path为当前路径 12 print 'Useage: batchrename.py [path] newfilenames' 13 sys.exit() 14 15 def BatchRename(path, pattern): 16 #设置路径 17 os.chdir(path) 18 fileList = os.listdir(path) 19 20 dotIndex = pattern.rfind('.') 21 fileName = pattern[ : dotIndex] 22 fileExt = pattern[dotIndex : ] 23 genNum = 0 24 for fileItem in fileList: 25 fileFullName = fileName + ' (' + str(genNum) + ')' + fileExt 26 os.rename(fileItem, fileFullName) 27 print (fileItem + ' => ' + fileFullName) 28 genNum += 1 29 30 def main(): 31 if len(sys.argv) == 3: 32 path = sys.argv[1] 33 pattern = sys.argv[2] 34 elif len(sys.argv) == 2: 35 path = os.getcwd() 36 pattern = sys.argv[1] 37 else: 38 UsePrompt() 39 confirm = raw_input('Confirm(y|n): ') 40 if confirm == 'n': 41 sys.exit() 42 BatchRename(path, pattern) 43 44 if __name__ == '__main__': 45 main()
新增:
添加撤销上次批量重命名功能。使用方法:batchrename.py /r
1 #!\usr\bin\env python 2 # -*- coding: utf-8 -*- 3 # Author: PZX 4 # FileName: batchrename.py 5 # Function: 批量命名某一文件夹下的文件名 6 7 import sys 8 import os 9 import os.path 10 import pickle 11 12 def UsePrompt(): 13 #如果省略path,则path为当前路径 14 print 'Useage: batchrename.py [path] [newfilenames | /r]' 15 print '\tuse /r to cancel the renaming operation' 16 sys.exit() 17 18 def BatchRename(path, pattern): 19 #设置路径 20 os.chdir(path) 21 fileList = os.listdir(path) 22 23 dotIndex = pattern.rfind('.') 24 fileName = pattern[ : dotIndex] 25 fileExt = pattern[dotIndex : ] 26 genNum = 0 27 fileNameDict = {} 28 for fileItem in fileList: 29 fileFullName = fileName + ' (' + str(genNum) + ')' + fileExt 30 os.rename(fileItem, fileFullName) 31 genNum += 1 32 print (str(genNum) + ': ' + fileItem + ' => ' + fileFullName) 33 fileNameDict[fileItem] = fileFullName 34 35 #保存重命名的记录 36 recordDir = os.path.dirname(__file__) 37 recordPath = os.path.join(recordDir, 'batchrenamerecord') 38 recordFile = file(recordPath, 'wb') 39 pickle.dump(path, recordFile, pickle.HIGHEST_PROTOCOL) 40 pickle.dump(fileNameDict, recordFile, pickle.HIGHEST_PROTOCOL) 41 recordFile.close() 42 43 def CancelBatchRename(): 44 #读取上一次重命名的记录文件 45 recordDir = os.path.dirname(__file__) 46 recordPath = os.path.join(recordDir, 'batchrenamerecord') 47 recordFile = file(recordPath, 'rb') 48 path = pickle.load(recordFile) 49 fileNameDict = pickle.load(recordFile) 50 recordFile.close() 51 52 os.chdir(path) 53 54 #撤销上一次重命名 55 genNum = 0 56 newFileNameDict = {} 57 for orgName, newName in fileNameDict.items(): 58 os.rename(newName, orgName) 59 genNum += 1 60 print (str(genNum) + ': ' + newName + ' => ' + orgName) 61 newFileNameDict[newName] = orgName 62 63 recordDir = os.path.dirname(__file__) 64 recordPath = os.path.join(recordDir, 'batchrenamerecord') 65 recordFile = file(recordPath, 'wb') 66 pickle.dump(path, recordFile, pickle.HIGHEST_PROTOCOL) 67 pickle.dump(newFileNameDict, recordFile, pickle.HIGHEST_PROTOCOL) 68 recordFile.close() 69 70 71 def main(): 72 cancelling = False 73 if len(sys.argv) == 3: 74 path = sys.argv[1] 75 pattern = sys.argv[2] 76 elif len(sys.argv) == 2: 77 if sys.argv[1] == '/r': 78 cancelling = True 79 else: 80 path = os.getcwd() 81 pattern = sys.argv[1] 82 else: 83 UsePrompt() 84 confirm = raw_input('Confirm(y|n): ') 85 if confirm == 'n': 86 sys.exit() 87 if cancelling: 88 CancelBatchRename() 89 else: 90 BatchRename(path, pattern) 91 92 if __name__ == '__main__': 93 main()