DEV Community

Mate Technologies
Mate Technologies

Posted on

⚙️ Enterprise Bulk Rename — Ultimate Edition (Python GUI Tool)

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()
Enter fullscreen mode Exit fullscreen mode

⚙️ 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}"
Enter fullscreen mode Exit fullscreen mode

✔ 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(...)
Enter fullscreen mode Exit fullscreen mode

✔ 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)