Dateidatum in PowerShell ändern: Unix-Kommando touch nachbilden


    Tags: , ,

    Das Unix-Dienstprogramm touch erfüllt zwei Aufgaben: Wendet man es auf existierende Dateien an, dann ändert es deren Zeitstempel. Sind die als Parameter angegeben Dateien nicht vorhanden, dann legt es sie mit einer Größe von 0 Byte an. PowerShell kennt kein Cmdlet mit exakt dieser Funktion, aber man kann sie relativ einfach nachbilden.

    Die eigentliche Aufgabe von touch besteht darin, das Datum von Dateien zu ändern. Das kann man in PowerShell ebenfalls bewerkstelligen, indem man der Eigenschaft LastWriteTime von Dateiobjekten einen neuen Wert zuweist.

    Dies funktioniert natürlich nur mit existierenden Dateien, so dass sich der Nebeneffekt von touch nicht erzielen lässt, nämlich Dateien anzulegen.

    Fallunterscheidung für die 2 Kernfunktionen

    Aus diesem Grund muss man eine PowerShell-Funktion erstellen, die zuerst mit Test-Path abfragt, ob die Datei(en) existieren. Ist das der Fall, ändert man ihr Datum, wenn nicht, dann bemüht man Set-Content, um eine neue Datei mit der Größe von 0 Bytes anzulegen:

    function global:touch([string] $fname, [string] $datum){
    if(Test-Path $fname){
    if($datum -eq ""){
    Get-ChildItem $fname | foreach{$_.LastWriteTime = get-date}
    }
    else{
    Get-ChildItem $fname | foreach{$_.LastWriteTime = get-date $datum}
    }
    }
    else{
    Set-Content $fname $null
    }
    }

    Der Unix-Befehl touch bietet die Möglichkeit, entweder über den Parameter -t ein Datum und eine Uhrzeit explizit anzugeben, oder diese wegzulassen, so dass er automatisch die Systemzeit nimmt.

    Wenn man dieses Verhalten auf eine PowerShell-Funktion übertragen möchte, dann muss man prüfen, ob der Wert der Datumsangabe die leere Zeichenkette ist. Sie provoziert nämlich einen Fehler, wenn man sie an Get-Date übergibt.

    Dateidatum durch Schreiben der Eigenschaft LastWriteTime mit PowerShell ändern

    Beispielaufruf

    Die oben vorgestellte Funktion touch verzichtet auf benannte Parameter, man gibt ein Datum bei Bedarf einfach an zweiter Position an:

    touch *.docx "2.2.1980 21:33:00"

    Dieser Aufruf ändert den Zeitstempel aller Dateien mit der Endung .docx im aktuellen Verzeichnis auf den 2.2.1980. Die Uhrzeit, in diesem Beispiel 21:33:00, ist optional. Lässt man sie weg, dann wird sie auf 00:00:00 gestellt.

    Wie üblich steht die Funktion touch als eigenes Kommando zur Verfügung, nachdem man ihre Definition eingegeben hat. Das klappt für mehrzeiligen Code auch auf der Kommandozeile, bequemer ist jedoch die PowerShell_ISE. Möchte man den Befehl in jeder Sitzung zur Verfügung haben, dann muss man die function in das Profil aufnehmen.

    Täglich Know-how für IT-Pros mit unserem Newsletter

    Wir ver­wenden Ihre Mail-Adresse nur für den Ver­sand der News­letter.
    Es erfolgt keine per­sonen­be­zogene Auswertung.

    Bild von Wolfgang Sommergut
    Wolfgang Sommergut hat lang­jährige Erfahrung als Fach­autor, Berater und Kon­ferenz­sprecher zu ver­schie­denen Themen der IT. Da­ne­ben war er als System­ad­mi­ni­stra­tor und Con­sultant tätig.
    // Kontakt: E-Mail, XING, LinkedIn //

    Verwandte Beiträge

    Weitere Links

    1 Kommentar

    Top, sowas hatte ich mir auch mal gebastelt, allerdings noch in Batch. Danke.