pat.bat
Goto Top

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:

$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

Content-Key: 435215

Url: https://administrator.de/contentid/435215

Printed on: April 16, 2024 at 13:04 o'clock

Member: Kraemer
Kraemer Apr 01, 2019 at 09:14:17 (UTC)
Goto Top
Moin,

RegEx ist hier ein verlässlicher Partner.

Gruß
Mitglied: 139374
139374 Apr 01, 2019 updated at 14:38:44 (UTC)
Goto Top
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  
Mitglied: 77559
77559 Apr 07, 2019, updated at Apr 09, 2019 at 23:53:55 (UTC)
Goto Top
Moin moin,

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
Mitglied: 139374
139374 Apr 08, 2019 updated at 05:40:41 (UTC)
Goto Top
(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.
Mitglied: 77559
77559 Apr 09, 2019 at 23:57:39 (UTC)
Goto Top
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