Renaming files one by one is painful.
Renaming hundreds (or thousands)? That’s a nightmare.
So I built a powerful, enterprise-grade bulk renaming tool in Python — with preview, undo, conflict resolution, and even force renaming.
👉 Get the full tool here: https://gum.new/gum/cmjzyahd9001n04l4fmdwbz24
🚀 What Makes This Tool Different?
This isn’t just another “rename files” script. It’s designed like a professional desktop utility.
🛠 Key Features
✅ Batch rename thousands of files safely
⚡ Real-time preview before applying changes
🔁 Undo system with batch tracking (SQLite powered)
🧠 Smart conflict resolution (auto-renames duplicates)
💪 Force rename locked/restricted files
🖱 Drag & drop support
📂 Folder + recursive file selection
📊 Progress bar + cancel operation
📁 Export rename history to CSV
🧠 Smart Rename Patterns
The tool supports dynamic placeholders so you can generate powerful naming schemes:
Placeholder Description
{name} Original filename
{ext} File extension
{num} Auto-increment number
{date} Last modified date
{uuid} Random unique ID
💡 Examples
file_{num}{ext}
→ file_001.jpg
file_{num}_{name}{ext}
→ file_001_vacation.jpg
{name}_backup{ext}
→ vacation_backup.jpg
🖼️ How It Works (Workflow)
Select files / folders OR drag & drop
Enter your rename pattern
Preview changes instantly
Fix conflicts automatically
Click Rename
Undo anytime if needed
🔄 Undo System (Game-Changer)
Every rename operation is stored in a SQLite database.
That means:
You can undo entire batches
Track rename history
Export logs to CSV
def undo_batch(batch_id):
with sqlite3.connect(DB_NAME) as conn:
rows = conn.execute("""
SELECT folder, original_name, new_name
FROM rename_history
WHERE batch_id=?
ORDER BY id DESC
""", (batch_id,)).fetchall()
⚙️ Conflict Resolution Engine
No more “file already exists” errors.
The tool automatically detects duplicates and resolves them:
while (folder, candidate) in seen or os.path.exists(os.path.join(folder, candidate)):
candidate = f"{base}({i}){ext}"
✔ Example:
file_001.jpg
file_001(1).jpg
file_001(2).jpg
💪 Force Rename Mode
Sometimes files are:
Locked
Read-only
Restricted
Enable Force Rename to override safety checks.
⚠️ A warning indicator highlights risky operations in red.
🧵 Multithreaded Performance
Renaming runs in a background thread, so your UI never freezes:
class RenameWorker(threading.Thread):
def run(self):
for i, (folder, old, new) in enumerate(self.rows):
os.rename(...)
✔ Smooth
✔ Responsive
✔ Cancel anytime
🖥️ Built With
🐍 Python
🎨 Tkinter + ttkbootstrap
🗂 SQLite
🧵 Threading
🎯 Why I Built This
I needed a tool that could:
Handle large batches
Avoid naming conflicts
Provide undo safety
Feel like a real desktop app
So I built one — and made it better than most free tools out there.
📦 Get the Tool
If you want the full working version:
👉 https://gum.new/gum/cmjzyahd9001n04l4fmdwbz24
💡 Final Thoughts
If you’re dealing with:
Media files
Data exports
Project assets
Backups
This tool can save you hours of manual work.

Top comments (0)