65 lines
1.9 KiB
Python
65 lines
1.9 KiB
Python
import os
|
|
import sys
|
|
import glob
|
|
|
|
def process_files(files, scheme):
|
|
scheme_len = len(scheme)
|
|
|
|
for filename in files:
|
|
print(f"Processing file: {filename}")
|
|
print(f"Against scheme: {scheme}")
|
|
|
|
# Get the actual filename without the directory path
|
|
base = os.path.basename(filename)
|
|
|
|
name, ext = os.path.splitext(base)
|
|
|
|
if scheme_len == len(name):
|
|
new_name = ""
|
|
for i in range(scheme_len):
|
|
current_letter = scheme[i]
|
|
if current_letter == "?":
|
|
pass
|
|
elif current_letter == "!":
|
|
new_name += name[i]
|
|
elif current_letter == name[i]:
|
|
new_name += current_letter
|
|
else:
|
|
print(f"Mismatch at position {i}, skipping {filename}")
|
|
new_name = None
|
|
break
|
|
if new_name:
|
|
rename_file(filename, new_name, ext)
|
|
else:
|
|
print("No new name Generated. It is not supposed to do that")
|
|
return
|
|
|
|
def rename_file(file, new_name, ext):
|
|
dirname = os.path.dirname(file) # correct: preserve folder
|
|
old_base = os.path.basename(file)
|
|
|
|
if old_base != new_name:
|
|
new_filepath = os.path.join(dirname, new_name + ext)
|
|
os.rename(file, new_filepath)
|
|
print(f"Renamed '{old_base}' → '{new_name + ext}'")
|
|
else:
|
|
print(f"No renaming needed for '{old_base}'.")
|
|
|
|
|
|
def main():
|
|
if len(sys.argv) < 2:
|
|
print("Usage: scheme.py <scheme> [folder]")
|
|
sys.exit(1)
|
|
|
|
scheme = sys.argv[1]
|
|
folder = sys.argv[2] if len(sys.argv) > 2 else "."
|
|
|
|
# Get all files in the folder (assuming files are in the current directory by default)
|
|
files = glob.glob(os.path.join(folder, "*"))
|
|
|
|
# Run the renaming logic
|
|
process_files(files, scheme)
|
|
|
|
if __name__ == "__main__":
|
|
main()
|