Jump to content

Powershell-Script zum automatischen verschieben von Dateien anhand des Dateinamens


Direkt zur Lösung Gelöst von testperson,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

vor 1 Stunde schrieb Warlord205:

Sorry, dachte BOfH brauchte den gesamten Ordnerinhalt ?

:rolleyes: .... als Datei-Anhang!!! 

 

Du machst mich fertig. Und darauf habe ich keine Lust mehr. Mal sollen die Daten im Ziel-Ordner in Unterordnern mit Datumsformat sortiert sein, mal wieder nicht. Mal sollen im Quell-Ordner nur Zip-Dateien liegen, dann soll die Script-Datei im Quell-Ordner liegen. Dann sollen die Log- und Bild-Dateien in Unterordnern liegen, die die Fahrzeugnummer als Name haben, dann liegen sie aber offenbar in Unterordnern davon. So kann man nix automatisieren. Selbst wenn ich Dich bitte, eine Vorher- und Nachher-Beispiel-Datei-Struktur zu posten, kommt da nur wirrer Daten-Müll. Sowas macht mir schlechte Laune und das will ich nicht. Sorry, ich bin raus.

Link zu diesem Kommentar
vor 11 Stunden schrieb BOfH_666:

:rolleyes: .... als Datei-Anhang!!! 

 

Du machst mich fertig. Und darauf habe ich keine Lust mehr. Mal sollen die Daten im Ziel-Ordner in Unterordnern mit Datumsformat sortiert sein, mal wieder nicht. Mal sollen im Quell-Ordner nur Zip-Dateien liegen, dann soll die Script-Datei im Quell-Ordner liegen. Dann sollen die Log- und Bild-Dateien in Unterordnern liegen, die die Fahrzeugnummer als Name haben, dann liegen sie aber offenbar in Unterordnern davon. So kann man nix automatisieren. Selbst wenn ich Dich bitte, eine Vorher- und Nachher-Beispiel-Datei-Struktur zu posten, kommt da nur wirrer Daten-Müll. Sowas macht mir schlechte Laune und das will ich nicht. Sorry, ich bin raus.

Sorry es war nie meine Absicht euch hier unnötige Arbeit zu machen... Ich verstehe von der Materie garantiert noch nicht so viel wie Ihr, weshalb meine Rückmeldungen vielleicht nicht immer zufriedenstellend sind :(

 

Im Grunde war mir die Quell-Ordnerstruktur auch nie wirklich wichtig. Ich will doch nur eine "Code-Zeile" die in der Lage ist, im Quellverzeichnis den Ordner "BBBBB" zu identifizieren. Und den gesamten Inhalt des Ordners "BBBBB" in den entsprechenden Ordner des Ziel-Verzeichnisses mit Namen AAA-BBBBB einzusortieren....

 

Ich probiere einfach weiter rum. Danke trotzdem für deine Zeit, BOfH_666.

Link zu diesem Kommentar
  • Beste Lösung

Ich habe mal folgendes aus allem hier rausinterpretiert:

$SourcePath = "C:\Install\Test\Z_Messdaten"
$DestPath = "C:\Install\Test\Z_Ausgabeordner"

if(Test-Path -Path $SourcePath -PathType Container){
    $ZIPFiles = Get-ChildItem -Path $SourcePath -File -Filter *.zip

    foreach($ZIPFile in $ZIPFiles){
        $tempPath = $ZIPFile.BaseName.Split("_")
        $curDestPath = $("{0}\{1}-{2}" -f $DestPath, $tempPath[0], $tempPath[1])
        if(-not (Test-Path -Path $curDestPath -PathType Container)){
            New-Item -Path $curDestPath -ItemType Directory
        }
        Get-ChildItem -Path $("{0}\cuted\{1}" -f $ZIPFile.DirectoryName, $tempPath[1]) |
            Copy-Item -Destination $curDestPath -Recurse -Force
    }
} else{
    Write-Output "`"$SourcePath`" nicht vorhanden!"
}

 

Link zu diesem Kommentar
vor 5 Stunden schrieb testperson:

Ich habe mal folgendes aus allem hier rausinterpretiert:


$SourcePath = "C:\Install\Test\Z_Messdaten"
$DestPath = "C:\Install\Test\Z_Ausgabeordner"

if(Test-Path -Path $SourcePath -PathType Container){
    $ZIPFiles = Get-ChildItem -Path $SourcePath -File -Filter *.zip

    foreach($ZIPFile in $ZIPFiles){
        $tempPath = $ZIPFile.BaseName.Split("_")
        $curDestPath = $("{0}\{1}-{2}" -f $DestPath, $tempPath[0], $tempPath[1])
        if(-not (Test-Path -Path $curDestPath -PathType Container)){
            New-Item -Path $curDestPath -ItemType Directory
        }
        Get-ChildItem -Path $("{0}\cuted\{1}" -f $ZIPFile.DirectoryName, $tempPath[1]) |
            Copy-Item -Destination $curDestPath -Recurse -Force
    }
} else{
    Write-Output "`"$SourcePath`" nicht vorhanden!"
}

 

Danke! Klappt perfekt!! Genau so sollte es sein @testperson  :bowing:

 

Eine kleine Aufgabe habe ich aber noch.

 

Kann ich in einem Ordner alle .Zip Dateien " eine Ebene nach unten" in einen neuen Ordner legen?

Also ein "Source-Verzeichnis" mit mehreren Unterordnern nach .ZIP durchsuchen. Und diese innerhalb ihrer Strucktur in einen neuen Ordner reinlegen.

 

Anbei ein Text-File Vorher- / Nachher-Vergleich

Ordnerstrucktur_anpassen.txt

Danke :)

 

 

Link zu diesem Kommentar
vor einer Stunde schrieb Warlord205:

Also ein "Source-Verzeichnis" mit mehreren Unterordnern nach .ZIP durchsuchen. Und diese innerhalb ihrer Strucktur in einen neuen Ordner reinlegen.

Ja, klar. Nimm die Zeile

Get-ChildItem -Path $SourcePath -File -Filter *.zip

und ergänze um ein "-Recurse". Danach kannst du vermutlich mit der obigen "Logik" weitermachen.

Link zu diesem Kommentar
vor 11 Stunden schrieb testperson:

-Destination $("{0}\BP_CutTraces" -f $ZIP.DirectoryName) -Force

wäre vermutlich einfacher. ;)

Danke! hab ich eingearbeitet :)

 

Eine kleine Frage ist mir heute aber bei der ersten Real-Anwendung noch gekommen.

- Kann ich den Befehl "-Recurse" auf maximal eine Ordnerebene begrenzen?

 

Wenn ich meinen Code anwende, wird jedes mal ein neuer Ordner "BP_CutTraces" angelegt und die ".zip" Files landen immer eine ebene Tiefer.

 

Also das es nicht passiert das 2x "BP_CutTraces" untereinander erstellt wird?

 

C:\Z_Messdaten\cuted\BBBBB\BP_CutTraces\[DATEI].zip

und nicht:

C:\Z_Messdaten\cuted\BBBBB\BP_CutTraces\BP_CutTraces\[DATEI].zip

$SourcePath2 = "C:\Z_Messdaten\cuted\"

if(Test-Path -Path $SourcePath2 -PathType Container){  #Überprüfung ob SourcePath ein realer Pfad ist?
    $ZIPFiles2 = Get-ChildItem -Path $SourcePath2 -Filter *.zip -Recurse #Alle Zip-Files einlesen
    #Write-Host $ZIPFiles2 -ForegroundColor DarkGreen
    
    foreach($ZIP in $ZIPFiles2){ #Für jede ZIP-Datei ausführen:
        #Write-Host $ZIP -ForegroundColor Cyan

        if(-not (Test-Path -Path $("{0}\BP_CutTraces" -f $ZIP.DirectoryName) -PathType Container)){
            New-Item -Path $("{0}\BP_CutTraces" -f $ZIP.DirectoryName) -ItemType Directory
        }
        $car = $ZIP.DirectoryName
        Get-ChildItem -Path $car -File -Filter *.zip |
            Move-Item -Destination $("{0}\BP_CutTraces" -f $ZIP.DirectoryName) -Force
    }
} else{
    Write-Output "`"$SourcePath2`" nicht vorhanden!"   #Wenn SourcePath kein realer Pfad, Fehler ausgeben?
}

 

Danke!

 

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...