none
kürzen der Dateinamen von "Get-ChildItem -Path $Path | SELECT Name" RRS feed

  • Frage

  • Hallo,

    im grunde versuche ich folgendes zu realisieren...

    ich habe mehrere Daten in einem Ordner zu liegen, die automatisch von einem Programm mit dem Datum im Namen erstellt werden z.B.

    20131011-01.xmf

    Ich möchte nun alle Datein die älter sind als 30 Tage in einen Store/Backup kopieren/ausschneiden.

    Mein bisheriger Ansatz sieht wie folgt aus:

    $dateMax 		= '{0:yyyyMMdd}' -f (Get-Date).AddDays(-30);
    $mediaPath 		= "C:\Users\zarate_admin\Desktop\test"; 
    $mediaBackup 	= "C:\Users\zarate_admin\Desktop\back"; 
    $fileName 		= Get-ChildItem -Path $mediaPath | SELECT Name;

    nun wird jedoch der gesamte Name im Array gespeichert (ich kann auch wenn das Sinnvoller ist "?" mit Hashtables arbeiten) "20131011-01.xmf". Ich möchte jedoch nun um einen Abgleich machen zu können den Namen kürzen sodass dieser später so aussehen sollte "20131011". Wenn das geschafft ist, kann ich ja einfach das oben generierte Datum gegen den Dateinamen prüfen und alle Datein die somit älter sind als 30 Tage kopieren.

    Leider bekomme ich es nciht hin den Namen aus dem Array zu kürzen oder gar den Inhalt des Arrays in einen String zu konvertieren und in einem neuem Array abzuspeichern?

    Ich wäre für jede Hilfe dankbar :)!

    Freitag, 11. Oktober 2013 13:57

Antworten

  • Hashtabels sind hier eine gute Idee. aber ...

    PowerShell Produziert und verarbeitet Objekt, dabei sollt man bleiben ;-)

    Das Cmdlet Select-Objekt Produziert auch Objekte.

    Dort kann man "berechnete Eigenschaften" verwenden. Syntax :
    @{Name='Name des Properties'; Expression { Berechnung hier!}}

    Die DateTime Klasse (Structure) hat statische Methoden zum Parsen von Text zu Datum!
    [DateTime]::Parse() oder [DateTime]::ParseExcact()
    Siehe Dokumentation der Struktur: http://msdn.microsoft.com/de-de/library/vstudio/system.datetime.aspx

    Text ist in der PowerShell IMMER ein String Objekt. Diese hat viele Methoden zum verarbeiten von Text!
    Siehe Dokumentation der String Klasse!: http://msdn.microsoft.com/de-de/library/vstudio/system.string.aspx

    Ich nutze hier die Methode Substring() um einen teil herauszuschneiden.

    Get-ChildItem -Path D:\Temp\Test  | SELECT Name,@{name='Date';expression= { [DateTime]::ParseExact(($_.name).Substring(0,8),"yyyyMMdd",$null)}}

    Du bekommst ein Objekt zurück!

    In dem Property Date kannst du dein Datum abholen!

    Das Fullname Property einer Datei würde ich IMMER mitnehmen dort ist der Pfad zur Datei abgelegt!

    $dateMax 		= '{0:yyyyMMdd}' -f (Get-Date).AddDays(-30);
    $mediaPath 		= "C:\Users\zarate_admin\Desktop\test"; 
    $mediaBackup 	= "C:\Users\zarate_admin\Desktop\back";
    $fileName 		= Get-ChildItem -Path $mediaPath | SELECT Fullname,Name,@{name='Date';expression= { [DateTime]::ParseExact(($_.name).Substring(0,8),"yyyyMMdd",$null)}}
    
    ForEach($File in $Filename) {
    	Write-Host "Ausgabe der Datei"
    	Write-Host "Pfad = " + $File.Fullname
    	Write-Host "Name = " + $File.Name
    	Write-Host "Datum = " + $File.Date
    }
    P.S. Lass die dummen Semikolons am ende einer Zeile weg!


    Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    Mein deutscher PowerShell Blog
    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet)

    Freitag, 11. Oktober 2013 14:55