Veröffentlicht am Schreib einen Kommentar

Projektordner-Chaos Adé: Wie du mit cleveren Strukturen den Überblick behältst

Jedes Mal der gleiche Kram: Ein neuer Auftrag trudelt ein, und du stehst vor dem altbekannten Problem – das Anlegen des Projektordners beginnt. Und wie immer stellst du dir die brennenden Fragen: “Wo zur Hölle pack ich dieses Mal das Briefing, die Fremddaten, die Working Files und den ganzen anderen Rest hin? Habe ich eigentlich einen Standardordner für Wikis?”

Wir alle kennen diesen inneren Dialog, gefolgt von dem steten Vorsatz: “Beim nächsten Mal mach ich das anders, besser, strukturierter!” Doch wie bei den meisten guten Vorsätzen, versandet auch dieser häufig im stressigen Agenturalltag. Aber halt, Stopp! Ab jetzt sagen wir dem Chaos den Kampf an!

Warum Ordnung mehr als nur das halbe (Projekt-)Leben ist

Stell dir vor, jedes neue Projekt wäre mit einem Klick startklar. Klingt wie ein Träumchen? Ganz und gar nicht! Die Lösung liegt in einer cleveren Projektordnerstruktur, die nicht nur Zeit spart, sondern auch Nerven schont. Hier sind die Gründe, warum:

  1. Überblick behalten: In einem gut strukturierten Projektordner findet jeder sofort, was er sucht. Das spart nicht nur Zeit, sondern verhindert auch, dass wichtige Infos verschwinden.
  2. Effizienz steigern: Standardisierte Strukturen erleichtern die Einarbeitung neuer Teammitglieder und machen die Zusammenarbeit effizienter.
  3. Fehler minimieren: Wenn Klarheit herrscht, wo was hingehört, sinkt das Risiko von Fehlern.

Der Game-Changer: Automatisierte Projektstrukturen

Jetzt kommt der Clou: Ein einfaches PowerShell-Skript, das die gesamte Struktur in deinen Projektordnern auf Knopfdruck erstellt. Kein Grübeln mehr, kein “Wo war das noch gleich?” – stattdessen eine klare Struktur, die dir und deinem Team das Leben leichter macht.

Das Tool der Wahl: Ein PowerShell-Skript

Ein paar Zeilen Code in PowerShell zaubern eine Projektstruktur, die sich sehen lassen kann. Das Skript erstellt nicht nur den Hauptordner für das Projekt, sondern auch alle Unterordner, von “Design” über “Working Files” bis hin zu “Meetings”. Selbst ein Platz für die Repository-Links wird nicht vergessen. Das Beste daran? Einmal eingerichtet, kannst du dieses Skript für jedes neue Projekt wiederverwenden.

Was bringt’s dir eine gute Ordnerstruktur konkret?

  • Weniger Stress: Vergiss das manuelle Anlegen von Ordnern. Ein Klick, und du kannst dich auf das Wesentliche konzentrieren – deine Arbeit.
  • Mehr Zeit für das, was zählt: Investiere die Zeit, die du sonst mit Suchen und Sortieren verbracht hättest, in deine Projekte oder gönne dir eine wohlverdiente Pause.
  • Zufriedene Kunden: Schnellere Ergebnisse durch straffe Organisation machen dich und dein Team zu einem verlässlichen Partner.

Bonus: Ein kleiner Einblick in den Code

Für alle, die jetzt Feuer und Flamme sind, ihr eigenes Ordnungssystem zu erschaffen, hier ein kleiner Vorgeschmack. Stelle sicher, dass du PowerShell auf deinem Rechner hast und wage den Sprung.

Batch-Datei zum Starten

Hier ein Beispiel für eine Batch-Datei, die das PowerShell-Skript startet. Dies vereinfacht den Prozess, indem du das Skript direkt mit einem Doppelklick ausführen kannst.

batch: startScriptCreateFolders.bat

@echo off
REM Angenommen, das PowerShell-Skript befindet sich im gleichen Ordner wie diese Batch-Datei
PowerShell.exe -ExecutionPolicy Bypass -File ".\createFolders.ps1"
pause

Das PowerShell-Skript zum erstellen der Projektordnerstrukturen

Das Herzstück – das PowerShell-Skript – legt auf Knopfdruck eine komplette und durchdachte Ordnerstruktur für jedes deiner Projekte an. Hier ein Ausschnitt, der zeigt, wie du beginnen könntest:

powershell: startScriptCreateFolders.bat

# Pfad zur CSV-Datei definieren
$scriptPath = Split-Path -Parent $MyInvocation.MyCommand.Definition
$customersCsvPath = Join-Path -Path $scriptPath -ChildPath "..\customers.csv"

# Überprüfen, ob die CSV-Datei existiert. Wenn nicht, erstellen und Kopfzeile hinzufügen
if (-Not (Test-Path $customersCsvPath)) {
    "Abbreviation;Name" | Set-Content -Path $customersCsvPath -Encoding UTF8
}

# CSV-Datei lesen
$customers = if (Test-Path $customersCsvPath) { Import-Csv -Path $customersCsvPath -Delimiter ';' } else { @() }

# Kundenkürzel erfragen und überprüfen, ob es bereits existiert
do {
    $inputAbbreviation = Read-Host "Enter Customer Abbreviation"
    $customerAbbreviation = $inputAbbreviation.ToUpper()
    $existingCustomer = $customers | Where-Object { $_.Abbreviation -eq $customerAbbreviation }

    if ($existingCustomer) {
        $response = Read-Host "Is this the same customer as $($existingCustomer.Name)? (Y/N)"
        $isSameCustomer = if ([string]::IsNullOrWhiteSpace($response)) { 'Y' } else { $response }

        if ($isSameCustomer.ToUpper() -eq 'Y') {
            $customerName = $existingCustomer.Name
            break
        }
        else {
            Write-Host "This abbreviation is already in use. Please enter a different abbreviation."
        }
    }
    else {
        $customerName = Read-Host "Enter Customer Name"
        # Neue Kundeninformation in die CSV-Datei einfügen
        $newCustomerInfo = [PSCustomObject]@{Abbreviation = $customerAbbreviation; Name = $customerName }
        $newCustomerInfo | Export-Csv -Path $customersCsvPath -NoTypeInformation -Append -Delimiter ';' -Encoding UTF8
        break
    }
} while ($true)

$projectTitle = Read-Host "Enter Project Title"

# Setzt das Basisverzeichnis ein Level über dem aktuellen Skriptverzeichnis
$scriptPath = Split-Path -Parent $MyInvocation.MyCommand.Definition
$basePath = Join-Path -Path $scriptPath -ChildPath "..\..\Kunden"

# Überprüft und erstellt den Hauptkundenordner, falls nicht vorhanden
$customerFolderPath = Join-Path -Path $basePath -ChildPath "$customerAbbreviation - $customerName"
if (-Not (Test-Path $customerFolderPath)) {
    New-Item -Path $customerFolderPath -ItemType Directory
    Write-Host "Customer folder created: $customerFolderPath"
}

# CI & Basics Ordner erstellen
$ciBasicsPath = Join-Path -Path $customerFolderPath -ChildPath "${customerAbbreviation}000 - CI & Basics"
if (-Not (Test-Path $ciBasicsPath)) {
    New-Item -Path $ciBasicsPath -ItemType Directory
    # Unterordner für CI & Basics
    $ciBasicsFolders = @("Branding\Logos", "Branding\Fonts", "Styleguide", "Licensing Documents")
    foreach ($folder in $ciBasicsFolders) {
        $fullFolderPath = Join-Path -Path $ciBasicsPath -ChildPath $folder
        New-Item -Path $fullFolderPath -ItemType Directory
    }
    Write-Host "CI & Basics folder structure created."
}

# Austauschordner im Kundenordner erstellen
$exchangePath = Join-Path -Path $customerFolderPath -ChildPath "${customerAbbreviation}Exchange"
if (-Not (Test-Path $exchangePath)) {
    New-Item -Path $exchangePath -ItemType Directory
    Write-Host "Exchange folder created: $exchangePath"
}

# Korrigierte Erstellung des Projektordners mit inkrementeller Projektnummer unter Berücksichtigung von drei- und vierstelligen Nummern
$projectFolders = Get-ChildItem -Path $customerFolderPath -Directory | Where-Object { $_.Name -match "^$customerAbbreviation(\d{3,4}) " }
if ($projectFolders.Count -eq 0) {
    $projectNumber = 1
}
else {
    $projectNumbers = $projectFolders | ForEach-Object { if ($_.Name -match "^$customerAbbreviation(\d{3,4}) ") {[int]$matches[1]} } | Sort-Object
    $projectNumber = ($projectNumbers[-1] + 1)
}
$projectFolderName = "{0}{1:D3} - {2}" -f $customerAbbreviation, $projectNumber, $projectTitle
$projectFolderPath = Join-Path -Path $customerFolderPath -ChildPath $projectFolderName
New-Item -Path $projectFolderPath -ItemType Directory
Write-Host "Project folder created: $projectFolderPath"

# Unterordner und Dateien für das Projekt erstellen
$foldersToCreate = @("Design", "Design\Assets", "Design\Assets\SVGs", "Design\Assets\Images", "Design\Assets\Icons", "Working Files", "Working Files\Development", "Working Files\Print Media", "Working Files\Print Media\Flyers", "External Files", "External Files\PSD", "External Files\XD", "External Files\Photos", "External Files\Vectors", "External Files\Third-Party Documents", "External Files\Content", "External Files\Content\Texts", "External Files\Content\Images", "Meetings")
foreach ($folder in $foldersToCreate) {
    $fullPath = Join-Path -Path $projectFolderPath -ChildPath $folder
    New-Item -Path $fullPath -ItemType Directory
}

# Repository-Link.txt im Development-Ordner erstellen
$repoLinkFile = "$projectFolderPath\Working Files\Development\Repository-Link.txt"
New-Item -Path $repoLinkFile -ItemType File
# Beispielinhalt in die Repository-Link.txt Datei schreiben
Set-Content -Path $repoLinkFile -Value "Hier die Links zu den Bitbucket Repos einfügen"

# Beispiel für Meeting-Ordner mit Datum
$meetingDate = Get-Date -Format "yyyy-MM-dd"
$meetingFolderPath = "$projectFolderPath\Meetings\$meetingDate"
New-Item -Path $meetingFolderPath -ItemType Directory

Write-Host "Customer information saved."

Fazit:

Mit diesem Ansatz machst du Schluss mit dem Chaos und startest durch in eine organisierte Zukunft. Tauche tiefer in die Materie ein und entdecke auf unserem Blog weitere Tipps und Tricks, um deine Projekte und deine Arbeit noch effizienter zu gestalten.

Schreibe einen Kommentar

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