Как я могу изменить метку времени в файле?

177034
Joseph Hansen

Возможный дубликат:
Как изменить метку времени в DLL или EXE?
Windows-эквивалент команды Linux «Сенсорный»?

Как я могу установить временную метку для файла через командную строку на определенную дату?

Моя конкретная ситуация - Windows 7.

57
Вам, вероятно, следует уточнить свой вопрос и указать, что вы хотите выбрать новую метку времени. Два текущих ответа предполагают, что вы ищете порт Windows для команды Unix `touch`, которая устанавливает временную метку файла на текущее время. William Jackson 13 лет назад 1
Я просмотрел Sysinternals и уверен, что у них нет для этого никакой полезности. Вы должны попробовать программы, на которые есть ссылки с http://superuser.com/questions/135901/how-to-modify-timestamp-in-a-dll-or-exe William Jackson 13 лет назад 0
@ Уильям Джексон изменился, спасибо за это. Также, если это действительно порт Unix `touch`, я мог бы указать дату. http://en.wikipedia.org/wiki/Touch_(Unix). Что-то не так с автоматической связью, убедитесь, что вы получите обе скобки. Joseph Hansen 13 лет назад 0
Я ... не могу поверить, что никогда не удосужился прочитать "прикосновение человека". Вы научили меня чему-то новому. William Jackson 13 лет назад 1
Дубликат [Windows-эквивалент команды Linux 'touch'?] (Http://superuser.com/questions/10426/windows-equivalent-of-the-linux-command-touch) Scott 8 лет назад 0

5 ответов на вопрос

67
Joseph Hansen

Благодаря ответу Уильяма Джексона я нашел похожий вопрос о переполнении стека .

В принятом ответе государство использовать Powershell и следующие команды:

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

редактировать

Два примера:

(Это из комментариев :) Установите время последнего доступа к файлу aaa.csvк текущему времени:

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

Установите время создания файла foo.txtна 24 ноября 2015 г. в 6:00 утра:

$(Get-Item foo.txt).creationtime=$(Get-Date "11/24/2015 06:00 am") 
Небольшое изменение, которое является рекурсивным и немного короче, но менее читаемым: "gci -rec |% {$ _. LastWriteTime = ($ _. LastAccessTime = ($ _. CreationTime = (get-date" 2011-09-14T07: 10:00 ")))}" codybartfast 13 лет назад 8
Для людей, которые мало знают о Powershell, вы должны указать имя файла после Get-Item. Вы также можете опустить строку после Get-Date, чтобы установить для атрибута текущую дату / время, например поведение сенсорной команды по умолчанию. Наконец, вы можете передать этот код в качестве аргумента команде powershell, чтобы он просто выполнял его из существующего пакетного файла. Пример: `powershell $ (Get-Item aaa.csv) .lastwritetime = $ (Get-Date)` sjbotha 11 лет назад 7
Что если я хочу сделать это для каждого файла в каталоге? CodyBugstein 8 лет назад 0
Поиск "Powershell каждый файл". Вы можете найти такие вопросы: http://stackoverflow.com/q/16804265/756329 и http://stackoverflow.com/q/181036/756329 Joseph Hansen 8 лет назад 0
Формат даты и времени не соответствует команде, но общесистемный (в моей системе это был дд / мм / ггг). Martin Argerami 6 лет назад 1
38
William Jackson

Смотрите ответы на этот вопрос .

В частности, это может быть сделано с помощью:

copy /b filename.ext +,, 

Это установит метку времени на текущее время.

Документация для copyкоманды находится на TechNet .

Запятые указывают на пропуск параметра Destination .

Можете ли вы объяснить, как это работает? Что такое `+ ,,`? Как мне узнать, на какую дату он установлен? Joseph Hansen 13 лет назад 1
@josmh Проверьте ссылку документации для деталей. Временная метка устанавливается на текущее время, когда вы запускаете команду. Вы подразумеваете, что хотите иметь возможность изменить временную метку на произвольное время по вашему выбору? William Jackson 13 лет назад 1
Я не вижу, как это помогает мне выбрать новую дату для файла? Joseph Hansen 13 лет назад 7
Основная проблема заключается в том, что когда файл не находится в текущем каталоге ... он будет копировать файл в текущий каталог, а не "касаться" его на месте. Kasey Speakman 7 лет назад 0
@KaseySpeakman - эта команда зависит от нахождения в текущем каталоге. Используйте `pushd FILEDIR`, перед командой и` popd` после Tydaeus 6 лет назад 1
@JosephHansen Это работает путем копирования файла поверх самого себя, в результате чего считается, что файл был изменен «сейчас». Tydaeus 6 лет назад 0
К сведению, «оптимизация» в Vista + означает, что в зависимости от контекста отметка времени может не обновляться должным образом. Кажется, это работает нормально, если это единственная команда, которую вы запускаете, но если ваш скрипт делает больше, отметка времени может остаться без изменений. Tydaeus 6 лет назад 0
18
boot13

Nirsoft на помощь: попробуйте бесплатный инструмент nircmd . Это куча полезных инструментов в одной маленькой программе командной строки. Одна из команд позволяет вам указать одно или оба времени создания и изменения, например:

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

Также, если вы хотите перенести время из файла в другой, лучше всего работает файл clonefiletime из файла fileto! JasonXA 9 лет назад 1
Без командной строки, но более удобный для массового редактирования: [BulkFileChanger] (https://www.nirsoft.net/utils/bulk_file_changer.html) от Nirsoft SaAtomic 6 лет назад 0
13
Joseph Hansen

Используя Cygwin, установите отметку времени test.txt на 31 января 2000 года в 00: 01.00:

touch -t 200001310001.00 test.txt 
Это возвращается с неправильной ошибкой формата даты. ziggy 11 лет назад 0
@ Зигги, убедитесь, что вы получили все нули ... Joseph Hansen 9 лет назад 0
Это отлично сработало для меня `touch -t 201608221400 filename` чтобы установить его на 22.08.2016 14:00:00. SebastianH 7 лет назад 2
1
Justin Pearce

Посетите следующую веб-страницу: http://www.stevemiller.net/apps/

Win32 Console Toolbox содержит утилиту под названием «touch», которая позволяет вам изменять время для одного или нескольких файлов. Я считаю, что это работает только с американским форматом времени, хотя.