Wie kann ich den Zeitstempel einer Datei ändern? [Duplikat]

74

Mögliches Duplikat:
Wie ändere ich den Zeitstempel in einer DLL oder EXE?
Windows-Äquivalent zum Linux-Befehl 'touch'?

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

Meine spezielle Situation ist Windows 7.

Joseph Hansen
quelle
1
Sie sollten wahrscheinlich Ihre Frage klären und angeben, dass Sie den neuen Zeitstempel auswählen möchten. Die beiden aktuellen Antworten setzen voraus, dass Sie nach einem Windows-Port des Unix-Befehls suchen, der den touchZeitstempel einer Datei auf die aktuelle Zeit setzt.
William Jackson
Ich habe Sysinternals durchgesehen und bin mir ziemlich sicher, dass sie dafür kein Hilfsprogramm haben. Sie sollten versuchen, die Programme von superuser.com/questions/135901/…
William Jackson
@William Jackson Changed, danke dafür. Wenn es wirklich ein Port des Unix-Befehls wäre touch, könnte ich das Datum angeben. en.wikipedia.org/wiki/Touch_(Unix) . Bei der automatischen Verknüpfung ist jedoch ein Fehler aufgetreten. Stellen Sie sicher, dass Sie beide Klammern erhalten.
Joseph Hansen
1
Ich kann nicht glauben, dass ich mich nie darum gekümmert habe zu lesen man touch. Du hast mir etwas Neues beigebracht.
William Jackson

Antworten:

92

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

In der akzeptierten Antwort wird angegeben, dass Powershell und die folgenden Befehle verwendet werden sollen:

$(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:

(Dieser stammt aus den Kommentaren :) Legen Sie die letzte Zugriffszeit für eine Datei aaa.csvauf die aktuelle Zeit fest:

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

Legen Sie die Erstellungszeit 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")
Joseph Hansen
quelle
8
Eine kleine Variation, die rekursiv ist und etwas kürzer, aber weniger lesbar: "gci -rec |% {$ _. LastWriteTime = ($ _. LastAccessTime = ($ _. CreationTime = (get-date" 2011-09-14T07: 10:00)))} "
codybartfast
9
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 und die aktuelle Uhrzeit zu setzen, wie das Standardverhalten des Berührungsbefehls. Schließlich können Sie diesen Code als Argument an den Powershell-Befehl übergeben, damit dieser den Code nur aus einer vorhandenen Batch-Datei ausführt. Beispiel:powershell $(Get-Item aaa.csv).lastwritetime=$(Get-Date)
sjbotha
1
Was ist, wenn ich dies für jede Datei in einem Verzeichnis tun möchte?
CodyBugstein
Suchen Sie nach "Powershell every file". Möglicherweise finden Sie Fragen wie diese: stackoverflow.com/q/16804265/756329 und stackoverflow.com/q/181036/756329
Joseph Hansen
4
Das Datums- und Uhrzeitformat entspricht nicht dem Befehl, sondern dem systemweiten Format (in meinem System war es TT / MM / JJJ).
Martin Argerami
40

Siehe die Antworten auf diese Frage .

Konkret kann dies von Haus aus erfolgen mit:

copy /b filename.ext +,,

Dies setzt den Zeitstempel auf die aktuelle Zeit.

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

Die Kommas zeigen den Wegfall des Zielparameters.

William Jackson
quelle
2
Können Sie erklären, wie das funktioniert? Was ist das +,,? Woher weiß ich, auf welches Datum es festgelegt wird?
Joseph Hansen
1
@josmh Überprüfen Sie den Dokumentationslink auf Details. Der Zeitstempel wird auf die aktuelle Zeit gesetzt, wenn Sie den Befehl ausführen. Wollen Sie damit andeuten, dass Sie den Zeitstempel in eine brutale Zeit Ihrer Wahl ändern möchten?
William Jackson
7
Ich sehe nicht, wie mir das hilft, ein neues Datum für die Datei zu wählen.
Joseph Hansen
Das Hauptproblem dabei ist, wenn sich die Datei nicht im aktuellen Verzeichnis befindet ... sie kopiert die Datei in das aktuelle Verzeichnis, anstatt sie an Ort und Stelle zu "berühren".
Kasey Speakman
1
@KaseySpeakman - Dieser Befehl setzt voraus, dass Sie sich im aktuellen Verzeichnis befinden. Verwenden Sie pushd FILEDIRvor dem COMAND und popdnach
Tydaeus
25

Nirsoft zur Rettung: Probieren Sie das Freeware-Tool nircmd aus . 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"

boot13
quelle
3
Auch wenn Sie Zeit von einer Datei auf eine andere übertragen möchten, funktioniert clonefiletime filefrom fileto am besten!
JasonXA
Keine Befehlszeile , aber bequemer für die Massenbearbeitung: BulkFileChanger von Nirsoft
SaAtomic
15

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

touch -t 200001310001.00 test.txt
Joseph Hansen
quelle
Dies führt zu einem ungültigen Datumsformatfehler.
zickig
@ziggy stellen Sie sicher, dass Sie alle Nullen bekommen ...
Joseph Hansen
2
Das hat für mich perfekt funktioniert touch -t 201608221400 filename, um es auf den 22.08.2016 14:00:00 einzustellen.
SebastianH
1

Überprüfen 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, es funktioniert nur mit US-Format Zeiten.

Justin Pearce
quelle