MrMojoRisin666 0 Geschrieben 18. November 2020 Melden Teilen Geschrieben 18. November 2020 Hallo, der Titel mag etwas verwirrend sein, aber ich habe folgende Anforderung. Muss dazu sagen, ich kenn mich beim Scripting nicht wirklich aus, Normal suche ich mir zusammen was ich brauche, hier ist es aber für mich etwas komplexer und ich komme nicht weiter. Es werden am Tag automatisch mehrmals Dateien erzeugt, die dann dann auch immer wieder überschrieben werden. Diese Dateien sollen jetzt mit Zeitstempel im Namen an einen anderen Ort geschrieben werden. Das funktioniert schon hiermit. CURDATE.EXE CALL CURDATE.BAT COPY \\server\Folder\File.dat D:\Backup\Folder\File_%DATUM_ZEIT%.dat CURDATE.EXE liefert den Zeitstempel für den Namensstring. So, jetzt habe ich am Ende des Tages in jedem Ordner 4-10 Files. Dort möchte ich das neueste File nehmen und zippen, damit es weniger Platz wegnimmt und nochmal gesondert aufgehoben werden kann. Die anderen Files werden wieder gelöscht. Habe zwar schon bisschen was gefunden, das hat aber noch nicht so funktioniert. Zippen mit 7-Zip, aber wie das letzte File nehmen? "C:\Programme\7-Zip\7Z.EXE" a -mmt4 -t7z D:\ARCHIV\FOLDER\FILE_%DATUM_ZEIT%.7Z D:\BACKUP\FOLDER\LASTFILE.dat -r -m0=LZMA2 :x=9 :d=1024m :s=on Theoretisch macht er es ja so, wenn ich nen expliziten Namen angebe. Aber wie bekomme ich es hin, dass er die letzte erzeugte Datei nimmt? Zweites Problem ist, dass es nicht nur 1 Verzeichnis ist, sondern am Ende ca. 30 verschiedene Verzeichnisse mit je 4-10 Files pro Tag. Jetzt ist natürlich die Frage, wenn ich alle gleichzeitig zippe, ob das gutgeht. Die Files reichen von paar MB bis zu 40GB. Ich würde gerne eines nach dem anderen zippen. Gibts da ne Möglichkeit zu sagen. Zippe File1, wenn fertig, zippe File2 usw. Danke schon mal fürs Lesen und für hoffentlich hiflreiche Antworten Zitieren Link zu diesem Kommentar
testperson 1.677 Geschrieben 18. November 2020 Melden Teilen Geschrieben 18. November 2020 (bearbeitet) Hi, ich würde dir hier die PowerShell ans Herz legen: Mit Get-ChildItem holst du dir die Verzeichnisse unter D:\Backup Mit ForEach gehst du die Verzeichnisse nacheinander durch Mit Get-ChildItem holst du dir die Dateien, sortierst (Sort-Object) nach "LastWriteTime" und nimmst das letzte File (Select-Object -Last 1) Mit Compress-Archive erstellst du dir dein ZIP Gruß Jan P.S.: Ich würde auch den ersten Part ("Mit Zeitstempel wegkopieren") in PowerShell überführen. bearbeitet 18. November 2020 von testperson Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 18. November 2020 Melden Teilen Geschrieben 18. November 2020 vor 1 Stunde schrieb testperson: P.S.: Ich würde auch den ersten Part ("Mit Zeitstempel wegkopieren") in PowerShell überführen. ... würde ich auch. ... und den Zeitstempel bekommst Du in Powershell mit Get-Date -Format "yyyyMMdd_HHmmss". Zitieren Link zu diesem Kommentar
MrMojoRisin666 0 Geschrieben 23. November 2020 Autor Melden Teilen Geschrieben 23. November 2020 Also ich hatte jetzt mal Zeit mich damit zu beschäftigen. Habt Recht, Powershell ist das Tool der Wahl Habe jetzt alle Anforderungen am laufen, bis auf das Verschieben der letzten Dateinen. Kann es zwar mit je einem Einzeiler, aber das geht doch bestimmt in einem Statement. gci \\server\backup\folder1\ -File | sort LastWriteTime -Desc | Select -First 1 | Copy-Item -Destination \\server\backup\000_Archiv -Force Damit kopiere ich immer die letzte Datei in den 000_Archiv Ordner. Allerdings hab ich im Moment das Statement halt so oft drin, wie Ordner. Habs bisher nicht hinbekommen, wie schreibt man das dann? Zitieren Link zu diesem Kommentar
testperson 1.677 Geschrieben 23. November 2020 Melden Teilen Geschrieben 23. November 2020 Hi, siehe oben ;) Am 18.11.2020 um 15:07 schrieb testperson: Mit ForEach gehst du die Verzeichnisse nacheinander durch $myFolders = Get-ChildItem -Path \\server\backup -Depth 0 -Directory foreach($myFolder in $myFolders){ Write-Output $myFolder.FullName } Gruß Jan 1 Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 23. November 2020 Melden Teilen Geschrieben 23. November 2020 ... wobei Du das -Depth 0 auch noch weglassen kannst/solltest ... das verwirrt in diesem Fall eher, denke ich. Zitieren Link zu diesem Kommentar
MrMojoRisin666 0 Geschrieben 23. November 2020 Autor Melden Teilen Geschrieben 23. November 2020 In dem Fall machts keinen Unterschied, ob mit Depth oder nicht Aber hat auf jeden Fall geklappt. Hab jetzt alles fertig. Einzeln scheint alles zu gehen, dann mal alles in Task Scheduler packen und morgen mal schaun, was ich mir so gebastelt habe und ob ich wieder hier aufschlage Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 23. November 2020 Melden Teilen Geschrieben 23. November 2020 vor 1 Stunde schrieb MrMojoRisin666: Habt Recht, Powershell ist das Tool der Wahl Gut erkannt. vor 1 Stunde schrieb MrMojoRisin666: mit je einem Einzeiler, aber das geht doch bestimmt in einem Statement. Hier gleich noch eine dringende Empfehlung für Deine weitere "Powershell-Karriere". Bitte in Scripten und auch hier in Foren nicht alles in mit Einzeilern und so kruz wie's geht abhandeln!! Das macht eventuell auf der Konsole Sinn, wenn Du einfach nur eine Ausgabe brauchst. In Scripten und ganz besonders, wenn auch andere diese Scripte später eventuell benutzen und, wenn nötig, anpassen und erweitern sollen, solltest Du die Befehle so ausführlich und deklarativ schreiben, wie es geht. Dein Einzeiler würde so viel leichter/schneller verständlich sein: Get-ChildItem -Path '\\server\backup\folder1' -File | Sort-Object -Property LastWriteTime -Descending | Select-Object -First 1 | Copy-Item -Destination '\\server\backup\000_Archiv' -Force Vielleicht liest Du Dir bei Gelegenheit mal den Best-Practice and Style Guide durch. 1 1 Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 23. November 2020 Melden Teilen Geschrieben 23. November 2020 Und zum Scripten immer Visual Studio Code verwenden, kann ungemein helfen. ;) 1 Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.