Ich versuche, ein Skript zu erreichen, das erlaubt, durch Ordner und Dateien zu durchlaufen.Powershell-Extrakt Jahr und Monat von Zeichenkette
- Das Skript wird eine Datei importieren und den Namen und die Nummer aus der Datei extrahieren.
- Verwenden Sie die Namensschleife durch
C:\Temp
Ordner, um diesen Namen zu finden. - Listen Sie alle Dateien in diesem Ordner auf und extrahieren Sie das Jahr und den Monat. Die Datei sieht unten wie und das Skript
201705
aus dem Dateinamen extrahieren und konvertieren die05
Monate zuMay
AAA_123456789_201705021541_AAAAAA.pdf
- Das Skript nimmt dann alle Dateien, die
May
,June
,July
usw. und schicken sie in einen anderen Ordner sind durch eine Schaffung Ordner mit der Nummer aus der importierten Datei. Wenn zum Beispiel der Dateiname05
enthält, wird der OrdnerX00000000MAY2017
und die Dateien MAY-Dateien in diesen Ordner verschoben.
Die haben das folgende Skript bisher. Ich bin in der Lage, Dateien zu importieren extrahieren Sie die Informationen und durchlaufen Sie es, aber stecken bleiben an dem Teil, um Monat und Jahr aus dem Dateinamen zu extrahieren und sie in Variable zu setzen.
$data = Import-Csv -Path C:\temp\test.txt -Header "Number","Name" -Delimiter "|"
$Name = $data.Name
foreach ($cxName in $Name) {
$cxName = Get-ChildItem C:\temp\$cxName
ForEach ($item in $cxName) {
If ($item -match "(?<year>\d\d\d\d)(?<mon>\d\d)") {
"$item's date is $($Matches.Year)"
} Else {
"$item failed to match"
}
}
}
Wie wissen Sie, wo das Datum in diesem Dateiname Zeichenfolge sein wird? Ich bin ein wenig verloren, wie auch Schritt 4 funktioniert. Also wird das übereinstimmende Datum einen entsprechenden Ordner haben, der in MonYYYY endet, nach dem Sie suchen müssen? – Matt
Ich gehe davon aus, dass Ihre Regex-Art funktioniert, aber "$ Matches.Year" gibt "1234" in Ihrem Beispiel für Dateinamen aus? Gibt es eine Möglichkeit, dass Sie sicher sein können, dass Ihr Date immer am selben Ort sein wird? Oder haben Sie eine Art Referenz? – 30000MONKEYS
'[datetime] :: parseexact ($ item.name.split ('_') [2] .substring (0,6), 'yyyyMM', $ null)' sollte dir ein '[datetime]' Objekt geben. Dann benutze 'ToString ('MMMyyyy')', um es neu zu formatieren. – TheMadTechnician