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

74

Возможный дубликат:
Как изменить временную метку в dll или exe?
Windows-эквивалент команды Linux «touch»?

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

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

Джозеф Хансен
источник
1
Вам, вероятно, следует уточнить свой вопрос и указать, что вы хотите выбрать новую метку времени. Два текущих ответа предполагают, что вы ищете порт Windows команды Unix, touchкоторая устанавливает временную метку файла в текущее время.
Уильям Джексон
Я просмотрел Sysinternals и уверен, что у них нет для этого никакой полезности. Вам следует попробовать программы, ссылки на которые есть на сайте superuser.com/questions/135901/…
Уильям Джексон,
@ Уильям Джексон изменился, спасибо за это. Кроме того, если это действительно был порт команды Unix touch, я мог бы указать дату. en.wikipedia.org/wiki/Touch_(Unix) . Что-то не так с автоматической связью, убедитесь, что вы получаете обе скобки.
Джозеф Хансен
1
Я ... не могу поверить, что никогда не удосужился прочитать man touch. Вы научили меня чему-то новому.
Уильям Джексон

Ответы:

92

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

В принятом ответе государство использовать 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на 6 ноября 2015 г. в 6:00 утра:

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

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

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

copy /b filename.ext +,,

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

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

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

Уильям Джексон
источник
2
Можете ли вы объяснить, как это работает? Что это +,,? Как мне узнать, на какую дату он установлен?
Джозеф Хансен
1
@josmh Проверьте ссылку документации для деталей. Временная метка устанавливается на текущее время при запуске команды. Вы подразумеваете, что хотите иметь возможность изменить временную метку на произвольное время по вашему выбору?
Уильям Джексон
7
Я не вижу, как это помогает мне выбрать новую дату для файла?
Джозеф Хансен
Основная проблема заключается в том, что когда файл не находится в текущем каталоге ... он будет копировать файл в текущий каталог, а не "касаться" его на месте.
Кейси
1
@KaseySpeakman - эта команда зависит от нахождения в текущем каталоге. Используйте pushd FILEDIRдо и popdпосле
командования
25

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

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

boot13
источник
3
Также, если вы хотите перенести время из файла в другой, лучше всего работает файл clonefiletime из файла fileto!
JasonXA
Без командной строки, но более удобный для массового редактирования: BulkFileChanger от Nirsoft
SaAtomic
15

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

touch -t 200001310001.00 test.txt
Джозеф Хансен
источник
Это возвращается с неправильной ошибкой формата даты.
Зигги
@ Зигги, убедитесь, что вы получили все нули ...
Джозеф Хансен
2
Это отлично сработало для меня, touch -t 201608221400 filenameчтобы установить его на 22.08.2016 14:00:00.
СебастьянH
1

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

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

Джастин Пирс
источник