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


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"


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», которая позволяет вам изменять время для одного или нескольких файлов. Я считаю, что это работает только с американским форматом времени, хотя

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.