Created
July 12, 2020 00:47
-
-
Save RPGillespie6/6323d70cd8298fca5c62714e95a8037f to your computer and use it in GitHub Desktop.
Batch Rename Files
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import os | |
import sys | |
alpha_enum = "abcdefghijklmnopqrstuvwxyz" | |
sorted_files = sorted(sys.argv[1:]) | |
def printFiles(files, header="Files:"): | |
print(header) | |
for i, f in enumerate(files): | |
print(f"{i+1}) {os.path.basename(f)}") | |
print() | |
rename_order = [] | |
file_order = list(sorted_files) | |
printFiles(file_order) | |
while True: | |
rename_order = input("Enter rename order (enter if ok): ") | |
if not rename_order: | |
break | |
rename_order = list(map(lambda x: int(x) - 1, rename_order.split())) | |
new_order = [] | |
for i in rename_order: | |
new_order.append(file_order[i]) | |
for index in sorted(rename_order, reverse=True): | |
del file_order[index] | |
file_order = list(new_order + file_order) | |
printFiles(file_order) | |
print("\nSample formats -") | |
print("Prefix: 'prefix_{name}.{ext}'") | |
print("Suffix: '{name}_suffix.{ext}'") | |
print("Enum: 'prefix A-{enum} {name}.{ext}'") | |
format_string = input("Enter format: ") | |
if not format_string: | |
input("Invalid format") | |
sys.exit(1) | |
enum_start = 0 | |
enum_step = 0 | |
enum_num = True | |
if "{enum}" in format_string: | |
enum_start = input("Enum start value (default: 1): ") | |
enum_step = input("Enum step (default: 1): ") | |
enum_step = 1 if not enum_step else int(enum_step) | |
if not enum_start: | |
enum_start = "1" | |
if enum_start.isalpha(): | |
enum_num = False | |
if enum_start.isupper(): | |
enum_start = ord(enum_start) - ord('A') | |
alpha_enum = alpha_enum.upper() | |
else: | |
enum_start = ord(enum_start) - ord('a') | |
else: | |
enum_start = int(enum_start) | |
renamed_files = [] | |
enum_current = enum_start | |
for f in file_order: | |
path = os.path.split(f) | |
name, ext = os.path.splitext(path[-1]) | |
enum_resolved = enum_current if enum_num else alpha_enum[enum_current] | |
new_name = format_string.format(name=name, ext=ext[1:], enum=enum_resolved) | |
enum_current += enum_step | |
if not enum_num: | |
enum_current %= len(alpha_enum) | |
renamed_files.append(os.path.join(path[0], new_name)) | |
if len(renamed_files) != len(set(renamed_files)): | |
print("This operation will destroy files by giving multiple files the same name") | |
sys.exit(1) | |
printFiles(renamed_files, header="Renamed Files:") | |
input("Press enter to accept rename and exit") | |
for i,f in enumerate(renamed_files): | |
os.rename(file_order[i], renamed_files[i]) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment