DownloadGithubkostenlose SoftwareOpensourceProjektPythonVScode

Python-Tool MyAssist: Einen Windows Folder Generator entwickeln und als EXE-Datei bauen

image_print

Das Tool Windows Folder Generator ist ein leichtgewichtiges Python-Skript, das komplexe und strukturierte Ordnerhierarchien unter Windows automatisch auf Knopfdruck erstellt. Die gewünschte Verzeichnisstruktur wird dabei flexibel über eine zentrale structure.json definiert – ideal, um beispielsweise standardisierte Ordnerstrukturen für Obsidian oder wiederkehrende Projekte im Handumdrehen anzulegen. Verpackt als eigenständige, portable EXE-Datei lässt sich die Anwendung ganz ohne Python-Installation direkt unter Windows starten. In diesem Beitrag stellen wir den vollständigen Quellcode, die fertige EXE-Datei sowie eine exemplarische structure.json gebündelt als praktisches 7-Zip-Archiv zum Download bereit.

Windows_Folder_Generator.py

import json
import sys
from pathlib import Path
import customtkinter as ctk

# Erscheinungsbild konfigurieren
ctk.set_appearance_mode("Dark")
ctk.set_default_color_theme("blue")


class FolderGeneratorApp(ctk.CTk):

    def __init__(self):
        super().__init__()

        self.title("MyAssist - Windows Folder Generator")
        self.geometry("550x540")  # Höhe angepasst, da Eingabefelder wegfallen

        # Zuverlässige Ermittlung des Ordners (egal ob als Skript oder .exe)
        if getattr(sys, "frozen", False):
            self.script_dir = Path(sys.executable).resolve().parent
        else:
            self.script_dir = Path(__file__).resolve().parent

        self.config_file = self.script_dir / "structure.json"
        self.config_data = self.load_config()

        # UI Elemente aufbauen
        self.create_widgets()

    def load_config(self):
        """Lädt die JSON-Datei direkt aus dem Verzeichnis der EXE / des Skripts."""
        if self.config_file.exists():
            try:
                with open(self.config_file, "r", encoding="utf-8") as f:
                    return json.load(f)
            except Exception as e:
                print(f"Fehler beim Laden der JSON: {e}")
        
        # Fallback, falls keine JSON existiert
        return {"root_name": "MyAssist", "folders": []}

    def create_widgets(self):
        # Überschrift
        self.label_title = ctk.CTkLabel(
            self, text="MyAssist - Windows Folder Generator", font=("Arial", 18, "bold")
        )
        self.label_title.pack(pady=15)

        # Name des Basis-Ordners / Zielverzeichnisses
        self.frame_root = ctk.CTkFrame(self)
        self.frame_root.pack(fill="x", padx=20, pady=5)

        self.label_root = ctk.CTkLabel(self.frame_root, text="Basis-Ordner (Ziel):")
        self.label_root.pack(side="left", padx=10)

        self.entry_root = ctk.CTkEntry(self.frame_root, width=280)
        self.entry_root.insert(
            0, self.config_data.get("root_name", "MyAssist")
        )
        self.entry_root.pack(side="right", padx=10, pady=5)

        # Liste der Unterordner (Textfeld zur Ansicht)
        self.label_list = ctk.CTkLabel(
            self,
            text="Definierte Ordner-Struktur (aus structure.json):",
            font=("Arial", 12),
        )
        self.label_list.pack(anchor="w", padx=22, pady=(10, 0))

        self.textbox_folders = ctk.CTkTextbox(self, width=490, height=240)
        self.textbox_folders.pack(pady=5, padx=20)
        self.update_textbox()

        # Statusmeldung
        self.label_status = ctk.CTkLabel(
            self, text="", font=("Arial", 12, "italic")
        )
        self.label_status.pack(pady=5)

        # Haupt-Aktionsbutton
        self.btn_create = ctk.CTkButton(
            self,
            text="🚀 Ordnerstruktur im gleichen Verzeichnis erstellen",
            fg_color="green",
            hover_color="darkgreen",
            height=40,
            command=self.create_folders,
        )
        self.btn_create.pack(pady=15, padx=20, fill="x")

    def update_textbox(self):
        self.textbox_folders.delete("1.0", "end")
        for folder in self.config_data.get("folders", []):
            self.textbox_folders.insert("end", f"{folder}\n")

    def create_folders(self):
        root_input = self.entry_root.get().strip()
        
        # Erstellt die Ordner relativ zum Verzeichnis, in dem die .exe liegt
        base_path = self.script_dir / root_input

        created_count = 0
        try:
            for folder in self.config_data.get("folders", []):
                full_path = base_path / folder
                full_path.mkdir(parents=True, exist_ok=True)
                created_count += 1

            self.label_status.configure(
                text=f"✓ Erfolgreich {created_count} Ordner in '{base_path.name}' erstellt!",
                text_color="lightgreen",
            )
        except Exception as e:
            self.label_status.configure(
                text=f"❌ Fehler: {str(e)}", text_color="red"
            )


if __name__ == "__main__":
    app = FolderGeneratorApp()
    app.mainloop()

structure.json

{
  "root_name": "MyAssist_IT",
  "folders": [
    "IT/Windows/ActiveDirectory",
    "IT/Windows/Server",
    "IT/Windows/PowerShell",
    "IT/Windows/Client",
    "IT/Windows/Security",
    "IT/Linux/Administration",
    "IT/Linux/Networking",
    "IT/Linux/Docker_Containers",
    "IT/Linux/Server_Hosting",
    "IT/Netzwerk"
  ]
}

EXE Datei mit VSCode erstellen

Damit wir aus dem Quellcode die EXE Dateie erstellen können installieren wird Pyinstaller:

Anschließend wird die EXE Datei erzeugt:

python -m PyInstaller --noconsole --onefile --collect-all customtkinter Windows_Folder_Generator.py

Und so sieht die Software Oberfläche aus:

Nach Klick auf den grünen Knopf wird die Verzeichnisstruktur erstellt:

Bei Github gibts das Tool inkl. Quellcode zum Downloaden, viel Spaß beim Erstellen neuer Verzeichnisse!:

https://github.com/linformatik/MyAssist_Windows_Folder_Generator/releases/download/v1.0.0/MyAssist_WindowsFolderGenerator.7z

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert