Wie kann ich den Zeitstempel einer Datei ändern?

177240
Joseph Hansen

Mögliches Duplizieren:
Wie kann man den Zeitstempel in einer DLL oder einem Exe ändern?
Windows-Äquivalent des Linux-Befehls 'touch'?

Wie kann ich den Zeitstempel für eine Datei über die Befehlszeile auf ein bestimmtes Datum setzen?

Meine spezifische Situation ist Windows 7.

57
Sie sollten wahrscheinlich Ihre Frage klarstellen und angeben, dass Sie den neuen Zeitstempel auswählen möchten. Bei den beiden aktuellen Antworten wird davon ausgegangen, dass Sie nach einem Windows-Port des Unix-Befehls "touch" suchen, der den Zeitstempel einer Datei auf die aktuelle Uhrzeit setzt. William Jackson vor 13 Jahren 1
Ich habe Sysinternals durchgesehen, und ich bin mir ziemlich sicher, dass sie dafür kein Werkzeug haben. Sie sollten die Programme ausprobieren, auf die von http://superuser.com/questions/135901/how-to-modify-timestamp-in-a-dll-or-exe verwiesen wird William Jackson vor 13 Jahren 0
@ William Jackson geändert, danke dafür. Wenn es sich wirklich um einen Port des Unix-Befehls "touch" handelt, könnte ich das Datum angeben. http://en.wikipedia.org/wiki/Touch_(Unix). Mit der automatischen Verknüpfung ist jedoch etwas nicht in Ordnung. Vergewissern Sie sich, dass Sie beide Klammern erhalten. Joseph Hansen vor 13 Jahren 0
Ich kann nicht glauben, dass ich mir nie die Mühe gemacht habe, "Man Touch" zu lesen. Du hast mir etwas Neues beigebracht. William Jackson vor 13 Jahren 1
Duplikat von [Windows-Äquivalent des Linux-Befehls 'touch'?] (Http://superuser.com/questions/10426/windows-equivalent-of-the-linux-command-touch) Scott vor 8 Jahren 0

5 Antworten auf die Frage

67
Joseph Hansen

Aufgrund der Antwort von William Jackson fand ich eine ähnliche Frage zu Stack Overflow .

Die akzeptierte Antwort gibt an, Powershell und die folgenden Befehle zu verwenden:

$(Get-Item ).creationtime=$(Get-Date "mm/dd/yyyy hh:mm am/pm") $(Get-Item ).lastaccesstime=$(Get-Date "mm/dd/yyyy hh:mm am/pm") $(Get-Item ).lastwritetime=$(Get-Date "mm/dd/yyyy hh:mm am/pm") 

Bearbeiten

Zwei Beispiele:

(Dies ist aus den Kommentaren :) Setzen Sie die letzte Zugriffszeit für eine Datei aaa.csvauf die aktuelle Uhrzeit:

$(Get-Item aaa.csv).lastwritetime=$(Get-Date) 

Legen Sie den Erstellungszeitpunkt einer Datei foo.txtauf den 24. November 2015 um 6:00 Uhr fest:

$(Get-Item foo.txt).creationtime=$(Get-Date "11/24/2015 06:00 am") 
Eine geringfügige, rekursive und etwas kürzere Variante, die jedoch weniger lesbar ist: "gci -rec |% {$ _. LastWriteTime = ($ _. LastAccessTime = ($ _. CreationTime = (get-date" 2011-09-14T07: 10:00 ")))}" codybartfast vor 13 Jahren 8
Für Leute, die nicht viel über Powershell wissen, müssen Sie den Dateinamen nach Get-Item setzen. Sie können die Zeichenfolge auch nach Get-Date weglassen, um das Attribut auf das aktuelle Datum / die aktuelle Uhrzeit festzulegen, wie das Standardverhalten des Berührungsbefehls. Schließlich können Sie diesen Code als Argument an den Powershell-Befehl übergeben, damit dieser nur aus einer vorhandenen Batchdatei ausgeführt wird. Beispiel: `Powershell $ (Get-Item aaa.csv) .lastwritetime = $ (Get-Date)` sjbotha vor 11 Jahren 7
Was ist, wenn ich dies für jede Datei in einem Verzeichnis tun möchte? CodyBugstein vor 8 Jahren 0
Suchen Sie nach "Powershell Every File". Sie können Fragen wie diese finden: http://stackoverflow.com/q/16804265/756329 und http://stackoverflow.com/q/181036/756329 Joseph Hansen vor 8 Jahren 0
Das Datums- und Zeitformat entspricht nicht dem Befehl, sondern dem systemweiten Format (in meinem System war dies also TT / MM / JJJ). Martin Argerami vor 6 Jahren 1
38
William Jackson

Siehe die Antworten auf diese Frage .

Dies kann insbesondere nativ mit folgendem geschehen:

copy /b filename.ext +,, 

Dadurch wird der Zeitstempel auf die aktuelle Uhrzeit gesetzt.

Die Dokumentation für den copyBefehl befindet sich im TechNet .

Die Kommas geben an, dass der Parameter Destination nicht vorhanden ist.

Kannst du erklären, wie das funktioniert? Was ist das "+"? Woher weiß ich, an welchem ​​Datum es eingestellt ist? Joseph Hansen vor 13 Jahren 1
@josmh Überprüfen Sie den Dokumentationslink für Details. Der Zeitstempel wird auf die aktuelle Uhrzeit gesetzt, wenn Sie den Befehl ausführen. Wollen Sie damit sagen, dass Sie den Zeitstempel in eine von Ihnen gewählte arbritische Zeit ändern möchten? William Jackson vor 13 Jahren 1
Ich sehe nicht, wie ich dadurch ein neues Datum für die Datei auswählen kann? Joseph Hansen vor 13 Jahren 7
Das Hauptproblem dabei ist, wenn sich die Datei nicht im aktuellen Verzeichnis befindet. Die Datei wird in das aktuelle Verzeichnis kopiert, anstatt sie an der richtigen Stelle zu "berühren". Kasey Speakman vor 7 Jahren 0
@KaseySpeakman - Dieser Befehl setzt voraus, dass er sich im aktuellen Verzeichnis befindet. Verwenden Sie "pushd FILEDIR" vor dem Befehl und "Popd" danach Tydaeus vor 6 Jahren 1
@JosephHansen Dies funktioniert durch Kopieren der Datei über sich selbst, was dazu führt, dass die Datei "jetzt" geändert wird. Tydaeus vor 6 Jahren 0
Zu Ihrer Information, "Optimierungen" in Vista + bedeutet, dass der Zeitstempel je nach Kontext möglicherweise nicht wie erwartet aktualisiert wird. Es scheint gut zu funktionieren, wenn dies der einzige Befehl ist, den Sie ausführen. Wenn Ihr Skript jedoch mehr tut, bleibt der Zeitstempel möglicherweise unberührt. Tydaeus vor 6 Jahren 0
18
boot13

Nirsoft zur Rettung: Testen Sie das Freeware-Tool nircmd . Es ist eine Reihe nützlicher Tools in einem kleinen Befehlszeilenprogramm. Einer der Befehle können Sie einen oder beide angeben, erstellt Zeit und geänderte Zeit, wie folgt aus :

nircmd.exe setfiletime "c: \ temp \ myfile.txt" "24-06-2003 17:57:11" "22-11-2005 10:21:56"

Auch wenn Sie die Zeit von einer Datei in eine andere übertragen möchten, funktioniert Clonefiletime filefrom von fileto am besten! JasonXA vor 9 Jahren 1
Keine Befehlszeile, aber für die Massenbearbeitung günstiger: [BulkFileChanger] (https://www.nirsoft.net/utils/bulk_file_changer.html) von Nirsoft SaAtomic vor 6 Jahren 0
13
Joseph Hansen

Verwenden Sie Cygwin, um den Zeitstempel von test.txt auf den 31. Januar 2000 um 00: 01.00 Uhr festzulegen:

touch -t 200001310001.00 test.txt 
Dies wird mit einem ungültigen Datumsformatfehler zurückgegeben. ziggy vor 11 Jahren 0
@ziggy stellen Sie sicher, dass Sie alle Nullen bekommen ... Joseph Hansen vor 9 Jahren 0
Dies funktionierte perfekt für mich `touch -t 201608221400 filename`, um es auf 22.08.2016 14:00:00 einzustellen. SebastianH vor 7 Jahren 2
1
Justin Pearce

Besuchen Sie die folgende Webseite: http://www.stevemiller.net/apps/

Die Win32 Console Toolbox enthält ein Dienstprogramm namens "touch", mit dem Sie die Zeiten für eine oder mehrere Dateien ändern können. Ich glaube, dass es nur mit US-Format-Zeiten funktioniert.