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 [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()