Power Shell: Ordner mit aktuellem Jahr wählen
Hallo,
ich möchte gern prüfen lassen ob sich eine XML-Datei im Ordner mit dem aktuellsten/letzten vorhanden Jahr befindet.
Wenn nicht, soll eine Meldung ausgegeben werden.
Ordnerstruktur:
C:\Arbeitsordner\2015
C:\Arbeitsordner\2016
C:\Arbeitsordner\2017
C:\Arbeitsordner\2018
C:\Arbeitsordner\2019
C:\Arbeitsordner\2020
Jetzt soll das Skript automatisch den Ordner C:\Arbeitsordner\2020 auf XML-Datein prüfen.
Klar ist, dass ich das mit
beginne und mit
beende.
Aber wie teile ich Power Shell mit, dass er die letzte Jahreszahl als Prüfordner nimmt?
ich möchte gern prüfen lassen ob sich eine XML-Datei im Ordner mit dem aktuellsten/letzten vorhanden Jahr befindet.
Wenn nicht, soll eine Meldung ausgegeben werden.
Ordnerstruktur:
C:\Arbeitsordner\2015
C:\Arbeitsordner\2016
C:\Arbeitsordner\2017
C:\Arbeitsordner\2018
C:\Arbeitsordner\2019
C:\Arbeitsordner\2020
Jetzt soll das Skript automatisch den Ordner C:\Arbeitsordner\2020 auf XML-Datein prüfen.
Klar ist, dass ich das mit
if (!(Test-Path "C:\Arbeitsordner\
Write-Host "Keine XML Datei zu Verarbeitung vorhanden"
Aber wie teile ich Power Shell mit, dass er die letzte Jahreszahl als Prüfordner nimmt?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 666222
Url: https://administrator.de/contentid/666222
Ausgedruckt am: 24.11.2024 um 07:11 Uhr
12 Kommentare
Neuester Kommentar
Moin,
schau dir mal den Befehl get-date in Powershell an. Das aktuelle Jahr erhälst du zum Beispiel mit
Wie du Tage, Monate oder Jahre hinzufügst (oder abziehst) ist hier https://devblogs.microsoft.com/scripting/adding-and-subtracting-dates-wi ... gut beschrieben.
Gruß
Doskias
schau dir mal den Befehl get-date in Powershell an. Das aktuelle Jahr erhälst du zum Beispiel mit
get-date -format yyyy
Wie du Tage, Monate oder Jahre hinzufügst (oder abziehst) ist hier https://devblogs.microsoft.com/scripting/adding-and-subtracting-dates-wi ... gut beschrieben.
Gruß
Doskias
im Ordner mit dem aktuellsten/letzten vorhanden Jahr befindet.
$latestyearfolder = ls 'c:\arbeitsordner' -Directory | sort {[int]$_.Name} -desc | select -F 1
$latestyearfolder ist ein Objekt vom Typ [fileinfo], kein String! Ergo ...
oder auch so wenn man den Pfad als String in die Variable pappt, dann kann du die IF-Abfrage so lassen
if (!(Test-Path "$($latestyearfolder.Fullname)\*.xml"))
$latestyearfolder = ls 'C:\Arbeitsordner\' -Directory | sort {[int]$_.Name} -desc | select -F 1 -Expand Fullname
if (!(Test-Path '$latestyearfolder\*.xml')) {
Write-Host "Fehler: Keine XML Datei zur Verarbeitung enthalten." -ForegroundColor Red
}
$latestyearfolder = ls 'C:\Arbeitsordner\Testordner' -Directory | ?{$_.Name -match '^\d{4}$'} | sort {[int]$_.Name} -desc | select -F 1
$latestyearfolder = ls 'C:\Arbeitsordner\Testordner\????' -Directory | sort {[int]$_.Name} -desc | select -F 1
Zitat von @Hacktrist:
Perfekt.
Das sagt mir wieviele Zeichen der Ordner haben soll, richtig?
Nicht ganz, das sagt aus. dass der Ordner aus exakt 4 Zahlen bestehen muss. Das ist Regular Expression SyntaxPerfekt.
?{$_.Name -match '^\d{4}$'}
Regular Expressions Tutorial
Achtung ich hatte den Regex nachträglich noch korrigiert, Caret und Dollar hatten noch gefehlt.
Riesendank geht raus an @148121
Biddö. p.s. Sowas hier geht übrigens auch mit den Bordeigenen Filesystem Filters
$latestyearfolder = ls 'C:\Arbeitsordner\Testordner\2[0-9][0-9][0-9]' -Directory | sort {[int]$_.Name} -desc | select -F 1
Ja richtig, ist das Zirkumflex bzw. Caret, Name verwechsele ich manchmal .