Ihr C++ – nicht nur für Spiele und Treiber
\n\nWenn man „C++“ hört, denkt man oft an Schwergewichte: Unreal Engines, Betriebssysteme, Hochleistungsserver. Aber es gibt eine andere, ebenso nützliche Seite – die C++ Automatisierung. Während Kollegen Einmal-Bash-Skripte schreiben oder sich mit Python-Abhängigkeiten herumschlagen, können Sie ein kompaktes, schnelles Tool bauen, das jahrelang ohne ein einziges Interpreter-Update läuft.
\n\nIn diesem Artikel zeige ich Ihnen, wie Sie C++ in ein Schweizer Taschenmesser für die Automatisierung verwandeln. Wir behandeln reale Beispiele: vom Batch-Umbenennen von Dateien bis zum Log-Parsing und der Berichtsgenerierung. Sie werden sehen, dass Routineaufgaben mit C++ automatisieren nicht kompliziert ist, sondern sich durch Geschwindigkeit und Zuverlässigkeit auszahlt.
\n\nWarum C++ und nicht Python oder Bash?
\n\nJede Sprache hat ihren Platz. Aber es gibt Szenarien, in denen C++ die Nase vorn hat:
\n\n- \n
- Geschwindigkeit. Wenn Sie Terabytes an Logs verarbeiten – zählt jede Millisekunde. \n
- Keine Abhängigkeiten. Eine statisch kompilierte Binary läuft auf jedem Linux/Windows ohne Interpreter-Installation. \n
- Typsicherheit. Weniger Überraschungen zur Laufzeit – entscheidend für Automatisierung, die nach Zeitplan läuft. \n
- Systemzugriff. Direkte Arbeit mit WinAPI, POSIX, Registry, Prozessen – ohne Zwischenschichten. \n
Klar, für schnelle Prototypen ist Python praktischer. Aber wenn das Skript Teil der CI/CD- oder Produktionsinfrastruktur wird, zahlt sich C++ Automatisierung mehrfach aus.
\n\nWerkzeugkasten: Was Sie brauchen
\n\nFür unsere Aufgaben brauchen Sie nicht das gesamte C++20. Ein grundlegendes Set reicht aus:
\n\n- \n
std::filesystem(C++17) – Datei- und Ordnerverwaltung \nstd::regex– Text-Parsing \nstd::fstream/std::stringstream– Lesen/Schreiben \nstd::chrono– Zeitmessung und Logging \n
Kompilieren Sie mit dem Flag -std=c++17 (oder /std:c++17 für MSVC).
Beispiel 1: Batch-Umbenennung von Dateien
\n\nStellen Sie sich vor: Sie haben einen Ordner mit Fotos IMG_001.jpg, IMG_002.jpg … Sie sollen sie ins Format 2025_01_15_001.jpg umbenennen. Von Hand – 10 Minuten mühsame Arbeit. Mit einem Skript – 0,2 Sekunden.
Code
\n#include <iostream>\n#include <filesystem>\n#include <regex>\n#include <string>\n\nnamespace fs = std::filesystem;\n\nint main() {\n std::string dir_path = "./photos";\n std::regex pattern(R"(IMG_(\\d+)\\.jpg)");\n std::string prefix = "2025_01_15_";\n\n for (auto &entry : fs::directory_iterator(dir_path)) {\n std::string filename = entry.path().filename().string();\n std::smatch match;\n\n if (std::regex_match(filename, match, pattern)) {\n std::string new_name = prefix + match[1].str() + ".jpg";\n fs::rename(entry.path(), entry.path().parent_path() / new_name);\n std::cout << "Umbenannt: " << filename << " -> " << new_name << "\\n";\n }\n }\n return 0;\n}\n\nDieses Beispiel zeigt, wie C++ Automatisierung mit std::filesystem und regulären Ausdrücken ein alltägliches Problem in wenigen Zeilen löst. Sie können es leicht an Ihre eigenen Muster anpassen.
Beispiel 2: Log-Parsing und Fehlerzählung
\n\nAngenommen, ein Server schreibt Logs im Format:
\n2025-01-15 10:23:45 [ERROR] Datenbankverbindung fehlgeschlagen\n2025-01-15 10:23:46 [INFO] Wiederholung #1\n2025-01-15 10:23:47 [ERROR] Timeout überschritten\n\nWir müssen eine Statistik erstellen: wie viele Fehler jedes Typs, und die Top 5 der häufigsten Meldungen ausgeben. Ein Bash-Einzeiler schafft das, aber bei Gigabytes an Logs ist C++ um ein Vielfaches schneller.
\n\nCode
\n#inc