Höchste Version von Dateien in anderes Verzeichnis kopieren
Hallo Leute,
ich arbeite bei einer Behörde im Bereich des standardisierten Datenaustauschs über Schnittstellen. Ich bin jedoch kein Techniker, sondern gehöre dem fachlichen Team an. Wir legen fest, welche Inhalte in Codelisten (XML) übertragen werden.
Diese Codelisten werden regelmäßig aktualisiert und dadurch versioniert (im Dateinamen und auch in der XML als Element). Für unsere Kunden müssen wir öfters die aktuellste Version jeder Codeliste zusammenstellen und ausliefern. Mittlerweile haben wir jedoch hunderte Codelisten mit jeweils mehreren Versionen, sodass da einige Dateien zusammengekommen sind
Diese liegen momentan alle in einem Windows-Ordner auf einem Laufwerk. Unsere IT-ler wollen irgendwann eine Software dafür programmieren, aber für die Zeit bis dahin wäre ein kleines Tool völlig ausreichend.
Die Namensgebung dieser Dateien ist beispielsweise:
101-v1.0.xml
101-v1.1.xml
101-v1.2.xml
102-v1.0.xml
102-v1.1.xml
103-v1.0.xml
104-v1.0.xml
104-v1.1.xml
etc.
Bevor ich händisch immer die jeweils höchste (aktuellste) Version einer Codeliste raussuchen muss (fehleranfällig), habe ich mich gefragt, ob es nicht irgendwie möglich wäre, dies automatisiert erledigen zu lassen und die Dateien in ein neues Verzeichnis zu kopieren (beim Beispiel wären dies 101-v1.2.xml, 102-v1.1.xml, 103-v1.0.xml, 104-v1.1.xml).
Ich habe schon danach gegoogelt, bin jedoch immer noch auf das Kopieren von der aktuellsten Datei nach Änderungsdatum gestoßen. Das funktioniert bei uns nicht, da über das Änderungsdatum der Datei keine Aussage über die höchste Version möglich ist.
Wäre es mit einer Batch-Datei zu lösen? Oder mit Powershell? Oder gar nicht möglich mit Windows Standardfunktionen (ich kann nicht jede Software installieren wegen internem Firmen-Windows)?
Unterscheidbar wären die Versionen anhand des Namens der Datei ("-v1.0"), dem Element Version in der XML ("V1.0") oder dem Element Datum in der XML ("YYYY-MM-DD").
Für Ideen wäre ich sehr dankbar
MfG
Suyalus
ich arbeite bei einer Behörde im Bereich des standardisierten Datenaustauschs über Schnittstellen. Ich bin jedoch kein Techniker, sondern gehöre dem fachlichen Team an. Wir legen fest, welche Inhalte in Codelisten (XML) übertragen werden.
Diese Codelisten werden regelmäßig aktualisiert und dadurch versioniert (im Dateinamen und auch in der XML als Element). Für unsere Kunden müssen wir öfters die aktuellste Version jeder Codeliste zusammenstellen und ausliefern. Mittlerweile haben wir jedoch hunderte Codelisten mit jeweils mehreren Versionen, sodass da einige Dateien zusammengekommen sind
Die Namensgebung dieser Dateien ist beispielsweise:
101-v1.0.xml
101-v1.1.xml
101-v1.2.xml
102-v1.0.xml
102-v1.1.xml
103-v1.0.xml
104-v1.0.xml
104-v1.1.xml
etc.
Bevor ich händisch immer die jeweils höchste (aktuellste) Version einer Codeliste raussuchen muss (fehleranfällig), habe ich mich gefragt, ob es nicht irgendwie möglich wäre, dies automatisiert erledigen zu lassen und die Dateien in ein neues Verzeichnis zu kopieren (beim Beispiel wären dies 101-v1.2.xml, 102-v1.1.xml, 103-v1.0.xml, 104-v1.1.xml).
Ich habe schon danach gegoogelt, bin jedoch immer noch auf das Kopieren von der aktuellsten Datei nach Änderungsdatum gestoßen. Das funktioniert bei uns nicht, da über das Änderungsdatum der Datei keine Aussage über die höchste Version möglich ist.
Wäre es mit einer Batch-Datei zu lösen? Oder mit Powershell? Oder gar nicht möglich mit Windows Standardfunktionen (ich kann nicht jede Software installieren wegen internem Firmen-Windows)?
Unterscheidbar wären die Versionen anhand des Namens der Datei ("-v1.0"), dem Element Version in der XML ("V1.0") oder dem Element Datum in der XML ("YYYY-MM-DD").
Für Ideen wäre ich sehr dankbar
MfG
Suyalus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 438948
Url: https://administrator.de/forum/hoechste-version-von-dateien-in-anderes-verzeichnis-kopieren-438948.html
Ausgedruckt am: 04.05.2025 um 02:05 Uhr
9 Kommentare
Neuester Kommentar

Oder mit Powershell?
Bitteschön:gci 'D:\Quelle' -Filter *.xml -File | sort {[int]($_.Basename -replace '[^\d]','')} -Desc | group {$_.Basename.split('-')} | %{$_.Group | select -First 1 | copy-item -Destination 'D:\Ziel'}

Zitat von @Suyalus:
vielen Dank für die schnelle Antwort. Ich habe den Befehl ausprobiert und folgende Fehlermeldung erhalten:
Powershell Anfänger hier lesen!vielen Dank für die schnelle Antwort. Ich habe den Befehl ausprobiert und folgende Fehlermeldung erhalten:
Die Datei "XXX.ps1" kann nicht geladen werden, da die Ausführung von Skripts auf diesem System deaktiviert ist.
https://www.windowspro.de/andreas-kroschel/powershell-executionpolicy-se ...
Wäre eine ähnliche Funktion mit Batch möglich?
Ja, kannst du so unter Umgehung der Policy direkt in die Batch schreiben:@echo off
powershell -Executionpolicy ByPass -NoP -Command "gci 'D:\Quelle' -Filter *.xml -File | sort {[int]($_.Basename -replace '[^\d]','')} -Desc | group {$_.Basename.split('-')} | %%{$_.Group | select -First 1 | copy-item -Destination 'D:\Ziel'}"

Es wurde kein Parameter gefunden, der dem Parameternamen "File" entspricht
Deine Powershell ist zu alt. < 3.0
Kann man aber umschreiben dann gehts auch in einer PS 2.0 ohne den Parameter -File den es dort eben nicht gibt!
@echo off
powershell -Executionpolicy ByPass -NoP -Command "gci 'D:\Quelle' -Filter *.xml | ?{!$_.PSIsContainer} | sort {[int]($_.Basename -replace '[^\d]','')} -Desc | group {$_.Basename.split('-')} | %%{$_.Group | select -First 1 | copy-item -Destination 'D:\Ziel'}"
bringt auch nur Fehlermeldungen :P
Das Hauptproblem ist das du eben noch zu wenig Ahnung von Powershell hast. Arbeite dich ein dann wirst du irgendwann verstehen das es geht.
Eigentlich brauchst du gar kein Powershell.
Es ist ein simples Batch Script zum sortieren von Dateien.
Wichtig wären mir jedoch noch die Informationen, ob:
-alle Dateien so aufgebaut sind wie in deinem Beispiel:
XXX-v.X.X.xml
-Die Versionen befinden sich alle in 1.X oder sogar in 4.1.6
LG Ileies
Es ist ein simples Batch Script zum sortieren von Dateien.
Wichtig wären mir jedoch noch die Informationen, ob:
-alle Dateien so aufgebaut sind wie in deinem Beispiel:
XXX-v.X.X.xml
-Die Versionen befinden sich alle in 1.X oder sogar in 4.1.6
LG Ileies

@echo off
powershell -Executionpolicy ByPass -NoP -Command "gci 'D:\Quelle' -Filter *.xml | ?{!$_.PSIsContainer} | sort {[int]($_.Basename -replace '[^\d]','')} -Desc | group {$_.Basename.split('-')} | %%{$_.Group | select -First 1 | copy-item -Destination 'D:\Ziel'; if($_.Group.Count -gt 1 -and $_.Group.Basename -like '*-struktur'){copy-item $_.Group[1].Fullname -Destination 'd:\ziel'}}"