Jak mogę zmienić sygnaturę czasową pliku? [duplikować]

74

Możliwa duplikat:
Jak zmodyfikować znacznik czasu w dll lub exe?
Odpowiednik systemu Windows „dotyk” w systemie Windows?

Jak ustawić znacznik czasu dla pliku za pomocą wiersza polecenia na określoną datę?

Moja konkretna sytuacja to Windows 7.

Joseph Hansen
źródło
1
Prawdopodobnie powinieneś wyjaśnić swoje pytanie i stwierdzić, że chcesz wybrać nowy znacznik czasu. Dwie aktualne odpowiedzi zakładają, że szukasz portu systemu Windows w poleceniu uniksowym, touchktóry ustawia znacznik czasu pliku na bieżący czas.
William Jackson
Przejrzałem Sysinternals i jestem prawie pewien, że nie mają na to użytecznego narzędzia. Powinieneś spróbować programów powiązanych z superuser.com/questions/135901/...
William Jackson
@William Jackson się zmienił, dzięki za to. Ponadto, jeśli naprawdę był to port komendy Unix touch, mógłbym podać datę. en.wikipedia.org/wiki/Touch_(Unix) . Coś jest nie tak z automatycznym łączeniem, upewnij się, że masz oba nawiasy.
Joseph Hansen
1
Nie mogę uwierzyć, że nigdy nie zadałem sobie trudu czytania man touch. Nauczyłeś mnie czegoś nowego.
William Jackson

Odpowiedzi:

92

Z powodu odpowiedzi Williama Jacksona znalazłem podobne pytanie na temat przepełnienia stosu .

W zaakceptowanych odpowiedź stany użyć PowerShell, a te polecenia:

$(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")

Edytować

Dwa przykłady:

(Ten pochodzi z komentarzy :) Ustaw czas ostatniego dostępu do pliku aaa.csvna aktualny czas:

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

Ustaw czas utworzenia pliku foo.txtna 24 listopada 2015 r. O godzinie 6:00:

$(Get-Item foo.txt).creationtime=$(Get-Date "11/24/2015 06:00 am")
Joseph Hansen
źródło
8
Niewielka odmiana, która jest rekurencyjna i nieco krótsza, ale mniej czytelna: "gci -rec |% {$ _. LastWriteTime = ($ _. LastAccessTime = ($ _. CreationTime = (get-date) 2011-09-14T07: 10:00 ")))}"
codybartfast
9
Dla osób, które nie wiedzą dużo o Powershell, musisz podać nazwę pliku po Get-Item. Możesz także pominąć ciąg znaków po Get-Date, aby ustawić atrybut na bieżącą datę / godzinę, podobnie jak domyślne zachowanie polecenia dotykowego. Wreszcie możesz przekazać ten kod jako argument do polecenia powershell, aby po prostu wykonał go z istniejącego pliku wsadowego. Przykład:powershell $(Get-Item aaa.csv).lastwritetime=$(Get-Date)
sjbotha,
1
Co jeśli chcę to zrobić dla każdego pliku w katalogu?
CodyBugstein
Wyszukaj „Powershell każdy plik”. Możesz znaleźć takie pytania: stackoverflow.com/q/16804265/756329 i stackoverflow.com/q/181036/756329
Joseph Hansen
4
Format daty i godziny nie jest zgodny z poleceniem, ale całym systemem (więc w moim systemie było to dd / mm / rrr).
Martin Argerami,
40

Zobacz odpowiedzi na to pytanie .

W szczególności można to zrobić natywnie za pomocą:

copy /b filename.ext +,,

Spowoduje to ustawienie znacznika czasu na bieżący czas.

Dokumentacja copypolecenia znajduje się w witrynie TechNet .

Przecinki oznaczają pominięcie parametru docelowego .

William Jackson
źródło
2
Czy możesz wyjaśnić, jak to działa? Co to jest +,,? Skąd mam wiedzieć, na którą datę ma być ustawiona?
Joseph Hansen
1
@josmh Sprawdź link do dokumentacji, aby uzyskać szczegółowe informacje. Po uruchomieniu polecenia znacznik czasu zostaje ustawiony na bieżący czas. Czy sugerujesz, że chcesz móc zmienić znacznik czasu na wybrany przez siebie czas arbitarny?
William Jackson
7
Nie widzę, jak to pomaga mi wybrać nową datę dla pliku?
Joseph Hansen
Główny problem polega na tym, że plik nie znajduje się w bieżącym katalogu ... skopiuje plik do bieżącego katalogu zamiast go „dotykać” w miejscu.
Kasey Speakman
1
@KaseySpeakman - to polecenie polega na byciu w bieżącym katalogu. Użyj pushd FILEDIR, przed popd
komendą
25

Nirsoft na ratunek: wypróbuj darmowe narzędzie nircmd . Jest to garść przydatnych narzędzi w jednym małym programie wiersza poleceń. Jedno z poleceń umożliwia określenie jednego lub obu utworzonych i zmodyfikowanych czasów :

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

boot13
źródło
3
Również jeśli chcesz przenieść czas z pliku do innego, clonefiletime filefrom fileto działa najlepiej!
JasonXA
Bez wiersza polecenia, ale wygodniejszy do edycji zbiorczej: BulkFileChanger autor: Nirsoft
SaAtomic
15

Za pomocą Cygwin ustaw znacznik czasu testu.txt na 31 stycznia 2000 r. O godzinie 00: 01.00:

touch -t 200001310001.00 test.txt
Joseph Hansen
źródło
Wraca z błędem nieprawidłowego formatu daty.
ziggy
@ziggy upewnij się, że dostałeś wszystkie zera ...
Joseph Hansen
2
To działało idealnie dla mnie, touch -t 201608221400 filenameaby ustawić go na 22.08.2016 14:00:00.
SebastianH
1

Sprawdź następującą stronę: http://www.stevemiller.net/apps/

Przybornik konsoli Win32 zawiera narzędzie o nazwie „dotyk”, które pozwala modyfikować czasy w jednym lub kilku plikach. Uważam jednak, że działa tylko z czasami formatu amerykańskiego.

Justin Pearce
źródło