Powershell - Datum aus Dateiname in Variable speichern
Hallo zusammen,
leider konnte google mir nicht weiterhelfen, daher wende ich mich mal wieder an euch. Ich denke, es wird was ganz simples sein, ich habe es auch schon per cmd geschrieben, allerdings bekomme ich einfach nicht heraus, wie es in Powershell gemacht wird.
Ich habe eine Datei "Test_29_03_2019_Teil1.txt". (bzw es gibt 5 Teile dieser Datei)
In meinem Skript soll am Ende eine Erstellte Datei "Test" mit dem Datumszusatz der obigen Datei zusammengefügt werden.
Im Batch hatte ich so eine Funktion schon gehabt, indem man :~4,7 nutzt, nimmt man halt die Zeichen 4-7 aus dem String.
Mein derzeitiges vorgehen:
ich speicher also die Dateinamen in ein Array und versuche nun aus der ersten Datei das Datum im Namen in eine Variable zu speichern. Nur geht das so in Powershell nicht.
Ich danke euch schonmal für eure Hilfe.
Pat
leider konnte google mir nicht weiterhelfen, daher wende ich mich mal wieder an euch. Ich denke, es wird was ganz simples sein, ich habe es auch schon per cmd geschrieben, allerdings bekomme ich einfach nicht heraus, wie es in Powershell gemacht wird.
Ich habe eine Datei "Test_29_03_2019_Teil1.txt". (bzw es gibt 5 Teile dieser Datei)
In meinem Skript soll am Ende eine Erstellte Datei "Test" mit dem Datumszusatz der obigen Datei zusammengefügt werden.
Im Batch hatte ich so eine Funktion schon gehabt, indem man :~4,7 nutzt, nimmt man halt die Zeichen 4-7 aus dem String.
Mein derzeitiges vorgehen:
$files = gci $SourcePath | %{$_.BaseName}
$CreationDate = $file:~4,8
ich speicher also die Dateinamen in ein Array und versuche nun aus der ersten Datei das Datum im Namen in eine Variable zu speichern. Nur geht das so in Powershell nicht.
Ich danke euch schonmal für eure Hilfe.
Pat
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 435215
Url: https://administrator.de/forum/powershell-datum-aus-dateiname-in-variable-speichern-435215.html
Ausgedruckt am: 23.04.2025 um 14:04 Uhr
5 Kommentare
Neuester Kommentar

Im Batch hatte ich so eine Funktion schon gehabt, indem man :~4,7 nutzt, nimmt man halt die Zeichen 4-7 aus dem String.
Powershell ist kein Batch, Powershell arbeitet "objektorientiert"dir 'D:\Test' -File | ?{$_.Basename -match '\d{2}_\d{2}_\d{4}'} | Add-Member -MemberType Noteproperty -Name DatumAusDateiname -Value ([datetime]::ParseExact($matches,"dd_MM_yyyy",[cultureinfo]::InvariantCulture)) -PassThru | select Fullname,DatumAusDateiname

Moin moin,
Das Parsen des Datums ist eigentlich nicht nötig, wichtiger wäre:
Dieses Script erzeigt eine Testumgebung mit 3 Sätzen von 12 Teil Dateien (Vorsicht wird erzeugt/gelöscht):
Dieses Script führt die beschriebenen Schritte aus:
Dies is das Ergbenis einer zusammengefügten Datei
Das Parsen des Datums ist eigentlich nicht nötig, wichtiger wäre:
- das Extrahieren des Names ohne Teilnummer sowie der Teilnummer,
- das Gruppieren danach und
- anschließender Ausgabe der Gruppen sortiert nach dem Integer der Teilnummer
- sowie dem Zusammenfügen der Teildateien.
Dieses Script erzeigt eine Testumgebung mit 3 Sätzen von 12 Teil Dateien (Vorsicht wird erzeugt/gelöscht):
$WorkDir = "A:\Test"
if (!(Test-Path $WorkDir)){
MD $WorkDir -EA 0| Out-Null
} else {
RM $WorkDir\* -EA 0| Out-Null
}
1..3|ForEach-Object{
$MyDate = Get-Date -Day (Get-Random -Min 1 -Max 30) -Month 3
for ($i=1;$i -le 12;$i++){
$FileName = "{0}\Test_{1:dd\_MM\_yyyy}_Teil{2}.txt" -f $WorkDir,$MyDate, $i
New-Item -ItemType File -Path $FileName -Value ($FileName+"`r`n")
}
}
Dieses Script führt die beschriebenen Schritte aus:
## Q:\Test\2019\04\07\AD_435215.ps1
$WorkDir = "A:\Test"
$Prefix = "Test"
$Suffix = "Teil"
$RE = "($($Prefix)_\d{2}_\d{2}_\d{4})_$Suffix(\d+)"
## \_____$Matches[1]__________/ \_/=$Matches[2]
Get-ChildItem -Path "$WorkDir\*.txt" -File |
Where-Object BaseName -match $RE |
Select-Object *,@{n='Teil';e={[int]$Matches[2]}}|
Group-Object {$Matches[1]} | ForEach-Object {
$Alle = Join-Path $WorkDir ($_.Name+'.txt') # Name=Group Name
Remove-Item $Alle -EA 0 | Out-Null
$_.Group | Sort-Object Teil | Get-Content | Add-Content -Path $Alle
}
Dies is das Ergbenis einer zusammengefügten Datei
> Get-Content A:\Test\Test_16_03_2019.txt
Test_16_03_2019_Teil1.txt
Test_16_03_2019_Teil2.txt
Test_16_03_2019_Teil3.txt
Test_16_03_2019_Teil4.txt
Test_16_03_2019_Teil5.txt
Test_16_03_2019_Teil6.txt
Test_16_03_2019_Teil7.txt
Test_16_03_2019_Teil8.txt
Test_16_03_2019_Teil9.txt
Test_16_03_2019_Teil10.txt
Test_16_03_2019_Teil11.txt
Test_16_03_2019_Teil12.txt

(und funktioniert hier mit dem Code auch nicht
Blödsinn, klar funktioniert der Code. Das sollte ihm nur veranschaulichen wie man den Datumstring in ein vernünftig verarbeitbares Datum mit dem man zur Not auch rechnen oder sortieren kann dem File-Objekt hinzufügt und ein bisschen zum selber mitdenken anregen!Der Rest wäre ja mit einem Foreach auf das Ergebnis erledigt.
Bringt ja kaum was wenn die Leute nur Copy n Pasten.

Zitat von @139374:
(und funktioniert hier mit dem Code auch nicht
Blödsinn, klar funktioniert der Code.Ich nehms zurück, war mein Fehler beim Übertragen.
Gruß
LotPings