Может ли командный файл изменить системную дату; сохранить файл с атрибутами; изменить дату на текущую дату?

Может ли командный файл изменить системную дату; сохранить файл с атрибутами; изменить дату на текущую дату?

Цель сохранить MYFILE.TXT с датой 01-01-2010

с помощью пакетных команд.

Я пытался установить дату = 01-01-2010

а затем сохранить файл, но это не сработало.

Это невозможно?

@echo off
rem to Run this Batch file as administrator

date 01-01-2010
echo %date%
pause
echo Hello World > test.txt

date 09-08-2010

echo %date%
pause

goto :eof

Примечание. Если мы не «Запуск от имени администратора», создается сообщение об ошибке «Клиент не обладает требуемой привилегией».


person Edoctoor    schedule 08.09.2010    source источник
comment
Это исключительно плохая идея. Изменение даты и времени повлияет на каждый запущенный процесс. Это будет иметь странные последствия для запланированных задач. Будут происходить странные вещи, и их будет очень трудно диагностировать, потому что все в системе предполагает, что время течет монотонно. Поскольку реальная цель состоит в том, чтобы сгенерированный файл соответствовал входным данным, вам понадобится утилита, например touch просто обновить дату одного сгенерированного файла.   -  person RBerteig    schedule 12.06.2012


Ответы (2)


Да, пакетный файл может это сделать, но я бы не рекомендовал его. Чтобы установить дату в Windows, вы используете команду DATE. Чтобы установить дату на 01.01.2010, вы должны выполнить эту команду в командной строке:

date 01-01-2010

Однако для этого вам потребуются права администратора.

Для изменения времени используется команда TIME.

Вы можете найти обе команды, используя средство HELP. то есть

help date
help time

Также можно получить текущую дату с помощью пакетного файла, чтобы вы могли повторно установить дату после внесения изменений. Это несколько сложнее. Вот один из способов сделать это.

Все сказанное, я согласен с Джеком Келли: получите утилиту touch.

person Jim Mischel    schedule 08.09.2010
comment
Спасибо ... Я уже пробовал установить дату = 01-01-2010, затем набрал :> Дата в другом окне CMD, и дата не изменилась. Я могу сделать весь код, но по какой-то причине я просто не могу установить переменную DATE в пакетном файле. Я ценю все отзывы, спасибо Должен ли я удалить этот вопрос? - person Edoctoor; 09.09.2010
comment
Нет переменной DATE. Вы не используете set date для установки даты. Введите дату команды 01-01-2010 в командной строке. - person Jim Mischel; 09.09.2010
comment
Вау, я не знал о токенизации цикла for. cmd.exe не перестает удивлять. - person Jack Kelly; 09.09.2010
comment
Обратите внимание, что связанный вариант для анализа даты не работает с довольно большим количеством локалей, как и любой наивный подход к пакетному анализу даты. Вы также должны отметить, что в любом случае не существует надежного способа анализа дат в пакетных файлах (по крайней мере, я не знаю ни одного — есть несколько подходов, которые работают с большим количеством локалей, но они также терпят неудачу с некоторыми). - person Joey; 09.09.2010
comment
Сценарий выше очень странный: при нормальном запуске создается файл test.txt и время не меняется; однако при запуске от имени администратора время меняется; Тем не менее, файл test.txt не создается. По крайней мере, я научился определять, запущен ли пакет от имени администратора или нет. Спасибо за всю вашу информацию. - person Edoctoor; 10.09.2010
comment
Как я сказал в своем ответе, вам потребуются права администратора, чтобы это работало. Установка системной даты — это привилегированная операция, которую могут выполнять только администраторы. - person Jim Mischel; 10.09.2010
comment
Знаете ли вы, почему файл test.txt не создается при запуске с правами администратора? - person Edoctoor; 10.09.2010

Лучше всего взять touch из GNUWin32 и использовать его для изменения меток времени. Делать это, изменяя системную дату, все равно, что использовать кувалду, чтобы расколоть орех.

person Jack Kelly    schedule 08.09.2010
comment
У меня есть большой пакетный файл; однако файл, который он выводит, должен иметь исходную дату и время, как те, которые он ввел. Это сказало; Я проверю GNUWin32 и надеюсь, что это поможет мне с другими проблемами. Спасибо за ваше время Джек Келли - person Edoctoor; 09.09.2010
comment
Это правильный ответ на проблему, поставленную @Edoctoor, хотя и не ответ на точный заданный вопрос. Я бы сказал, что это ответ на вопрос, который должен был быть задан. - person RBerteig; 12.06.2012