Меню Рубрики

Установка даты из файла cmd

Изменить даты и время создания файла, взяв информацию из имени файла

Вывод на экран консоли только имени и даты создания файла
Здравствуйте, необходимо вывести на экран консоли имена и даты создания файлов, содержащих атрибут.

Как изменить дату и время создания файла на текущие?
Как изменить дату и время создания файла на текущие? Пробовал соединить с нулевым, но как такой.

Копирование файла с добавлением текущей даты к имени файла
Просто копирую файл XCOPY D:\BACKUP\base.bak E:\BACKUP\*.* /Y — норм. Мне нужно не заменять.

Добавление текущей даты к имени файла при нестандартном формате вывода даты
Приветствую ! Давно и успешно используется код, который мне когда-то подсказали тут на форуме .

Решение

Инструкция к применению пакетного файла с этим кодом аналогична приведённой мной выше.

добрый день. ужас. я тут пытался смотреть эти выражения и голова чуть не поломалась

у меня за многие годы насобиралась куча фотографий и во многих тоже нет EXIF
и изза этого они постоянно множатся, когда копирую в телефоне у себя и знакомых (а такбы я их через комп исправлял после переноса на microsd). (там вообще сумасшествие какое то. все файловые менеджеры которые пробовал на android, все при копировании файлов из одного источника в другой постоянно теряют оригинальную дату файла)

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

— можете сделать так чтоб оно не обращало внимания на расширения во всех вариантах
— и чтоб не трогало дату если не нашло её в имени
— возможно ли распознать timestamp и сразу дату файла конвертануть в соответствии?
— можно ли както сделать чтоб эти комманды (выражения) по отдельным именам файлов включить в один батник
или чтоб можно было подключать батники по цепочке (это если они будут конфликтовать), чтоб както автоматизировать под нужды?
а если уж както они там будут конфликтовать, то может в какомто определенном порядке их там расположить?

#01 20121225.jpg
#02 201305302355.jpg
#03 20160229112546.jpeg
#04 2013-08-19-086.jpg
#05 2013-12-30-264.mp4
#06 20140313-0320.jpg
#07 20130710_164647.jpg
#08 20130707_111707_1.jpg
#09 20150217_143633

01.jpg
#10 20120819_171141(0).jpg
#11 20140528_170018_Unnamed Rd.jpg
#12 _20170319_003220.JPG
#13 IMG_20150805_141316_496.jpg
#14 IMG_20150805_210512.jpg
#15 IMG-20140101-WA0003.jpg
#16 VID-20170604-WA0034.mp4
#17 VID_20160721_115925.3gp
#18 C360_2014-10-16-19-26-30-485.jpg
#19 Screenshot_2013-01-18-14-25-04.png
#20 fotos_20140407013120.jpg
#21 10122011107.jpg вот еще видимо какойто американский формат нашел. тут сначала ddmmyyyy(дальше просто порядковый номер)
#22 image200810290008.jpg
#23 image200810290013_2.jpg

#24 photo_1393114136688.jpg есть даже такой зверь. я по одному из EXIF поглядел и там дата создания 2014-02-23 010914. я проверил по онлайн сервису и оно совпало и получилось что из имени файла первые 10 цифр это timestamp (1393114136) а потом просто порядковый номер незнаю чего. ну это уже и не важно

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

источник

Установка даты из файла cmd

В числе системных переменных есть переменная %date%, которая содержит текущую дату. Если в окне командного процессора ввести команду

то вывод будет примерно таким:
15.10.2014
Для получения отдельных значений номера дня, месяца и года используется операция извлечения подстроки. Так,

выведет подстроку, начиная с 6-го символа (символы нумеруются, начиная с 0) т. е. для даты 15.10.2014 это будет 2014 — четырехзначный год. Это же значение можно получить и следующей командой —

— извлечь четыре последних символа из строки.

соответственно, выведет 14 — двухзначный год.
Можно по аналогии использовать два последних символа строки

Различные варианты извлечения года мы рассмотрели. На очереди — день и месяц.

или это же можно записать так

выведет первые два символа строки — т. е. в данном случае номер дня. Ну и

извлечь два символа, начиная с третьего — выведет номер месяца.

Таким образом, для большей наглядности или если элементы даты используются в сценарии неоднократно, то можно использовать промежуточные переменные:

0,2% rem Месяц даты Set MM=%DATE:

3,2% rem Год даты [сокращенный] Set YY=%DATE:

8,2% rem Год даты [полный] Set YYYY=%DATE:

Следует все же отметить, что такой формат вывода даты используется в операционных системах более поздних, чем windows 2000. Для тех счастливых (часов не наблюдающих) и безмятежных людей, которые эксплуатируют эту или более ранние версии, упомяну, что работа с датой и механизм извлечения элементов даты будет несколько отличаться. На всякий случай приведу и его. Скорее для истории.
Не использовать для других операционных систем!

Читайте также:  Установка железобетонных стаканов ограждения

3,2% rem Месяц даты Set MM=%DATE:

6,2% rem Год даты [сокращенный] Set YY=%DATE:

11,2% rem Год даты [полный] Set YYYY=%DATE:

Выше были рассмотрены различные варианты получение элементов даты в bat / cmd файлах. И теперь можно приступать собственно к работе с файлами и папками (каталогами), в именах которых присутствуют элементы даты.

Копирование файлов, в имени которых присутствует дата.

В bat / cmd файлах там, где необходимо присутствие дня, месяца или года мы будем использовать значения, которые мы рассмотрели в предыдущем параграфе. Перед выполнением команды вместо %date. % или переменной, если вы ее определили, произойдет подстановка соответствующих значений.
Например, необходимо скопировать файл, с именем даты в формате YYYYMMDD и расширением rar в в каталог backup.

Если формат даты требуется такой — DDMMYY, то команда будет выглядеть так:

Или то же самое, если были определены переменные:

Копирование в файл или каталог (папку), в имени которых присутствует дата.

Довольно часто это так же используется и для создания архивов.

В приведенном примере создается архив с именем даты в формате YYYYMMDD.
Для проверки наличия и создания при необходимости каталога, в имени которого присутствует дата, можно использовать такой код:

0,2% if not exist %PATHARHDAY% ( md %PATHARHDAY% )

Теперь в такой каталог можно копировать/перемещать файлы

(Здесь, как и в других примерах, не проверяется код возврата команды, что не всегда приемлемо при написании «боевых» сценариев).
Если источник и (или) приемник находятся на сетевом диске и адрес его начинается с двух слэшей, то необходимо использовать команду xcopy.

Копирование файлов по дате создания

В некоторых случаях удобно копировать файлы, созданные (модифицированные) сегодня. Для этого даже нет необходимости знать их имена.
Конечно, можно написать собственный bat / cmd сценарий, который будет перебирать файлы требуемого каталога, извлекать дату создания файла, сравнивать с текущей и, при необходимости, копировать в каталог назначения. Но в операционной системе уже есть достаточно мощные средства, позволяющие выполнять такие действия. Их сейчас мы и рассмотрим.

Все файлы созданные (модифицированные) сегодня будут скопированы из каталога d:\input в d:\output

Такая команда скопирует все файлы сегодня созданные из папки N:\arhive в папку M:\SUPERARHIVE.
Если в предыдущем примере вместо copy использовать команду move, то такие файлы будут не скопированы, а перемещены.

И еще одна возможность — скопировать файлы, возраст которых не превышает одного дня

Надеюсь, что информация этого раздела помогла решить хотя бы часть проблем, связанных с копирование файлов или каталогов (папок), в имени которых присутствует дата. Если остались вопросы — задавайте их на форуме.

Для вопросов, обсуждений, замечаний, предложений и т. п. можете использовать раздел форума этого сайта (требуется регистрация).

источник

CMD/BAT: работа с датой и временем в командной строке

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Сообщения 1

1 Тема от Rumata 2010-01-21 22:48:50 (изменено: Rumata, 2010-01-22 19:42:40)

Тема: CMD/BAT: работа с датой и временем в командной строке

Эта тема родилась почти два года назад. Нам потребовалось самыми простыми средствами ТОЛЬКО командной строки получит временной слепок в формате ГГГГММДД_ччммсс (Год, Месяц, День, часы, минуты, секунды). В дальнейшем этот слепок предполагалось использовать в именах файлов для предотвращения путаницы в создаваемых однотипных файлах. Решение было найдено и использовалось некоторое время (решение опубликовано в виде статьи Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows).
Впоследствии обнаружилась незавершенность алгоритма — ночное и утреннее время (промежуток между 00:00 и 10:00) в зависимости от региональных настроек может содержать ведущий пробел вместо нуля (» 9:59″ вместо «09:59»). Для исправления этой ошибки была добавлена одна строка, и алгоритм заработал вновь.
Примерно через год возникла необходимость вернуться к этому алгоритму, и был найден более простой вариант решения проблемы — подстановки даты и времени в имя файла. Появилась заметка Дата и время в имени файла (подстановка стандартными средствами командной строки Windows). В заметке описывается суть нового алгоритма, использующего особенности метода раскрытия переменных и свойства конструкции for /f. Рассмотрим каждый из них в отдельности. В конце будет показан еще один пример использования этой методики.

Недостатки
Вначале хотелось бы сказать о существующих недостатках. Есть одна особенность, о которой следует помнить. Этот скрипт хорошо работает даже с таким форматом даты как М/Д/ГГГГ, например для даты 14 февраля 2010. Однако это никогда не проверялось, например, для дат неделей раньше. Об этом сказано в записи от 14 февраля 2009 на странице архива Роба ван дер Вуда. Однако в большинстве случаев это работает.

Читайте также:  Установки для распыления резиновой крошки

Раскрытие переменных
Конструкции вида %VAR:str1=str2% указывают интерпретатору раскрыть значение переменной VAR и произвести замену всех подстрок str1 на str2 во всей строке. Это хорошая особенность, которой мы можем воспользоваться — переменная %TIME% может содержать ненужный нам ведущий пробел и нам необходимо заменить его нулем

В данном случае str1 — это пробел, str2 — символ «ноль». Поэтому между двоеточием и знаком равенства один пробел. На всякий случай аналогичное проделываем и с переменной DATE.

Конструкция for /f
В зависимости от региональных настроек порядок элементов даты может варьироваться. Например, у нас принят формат ДД.ММ.ГГГГ, в некоторых англоговорящих странах ММ.ДД.ГГГГ. Для решения нашей проблемы надо выбрать каждую часть времени и отсортировать в нужном нам порядке — разбить строку на части по разделителям (точка «.», пробел » «, слеш «/», запятая «,», тире «-«, двоеточие «:»), полученные части записать в переменные цикла и сохранить в нужном нам порядке

Рассмотрим, как же эта конструкция поможет нам. for /f рассматривает входной поток (текстовая строка. файл на диске или вывод команды). В данном случае это строка, например дата и время создания этой темы 21.01.2010 21:48:50,23 (согласно настроек на моей системе). Эта строка анализируется и разбивается разделителями на отдельные фрагменты (токены).
Обратите внимание на пробел в списке разделителей — «/-. «. Так как входная строка содержит только целочисленную информацию, разделенную разделителями, то в строке всего 7 токенов.
Для того чтобы все токены были переданы внутрь цикла указываем количество и список токенов — «tokens=1-7», то есть все семь — с первого по седьмой. Чтобы все семь токенов попали в цикл на обработку будут выделено семь переменных цикла. В заголовке цикла указано имя первой переменной %%a. Следующие переменные получат последовательно имена %%b, %%c, %%d, %%e, %%f, %%g. В первую переменную %%a попадет первый токен, во вторую, %%b — второй токен, и т.д.
И так. В этом примере порядок следующий (работает на моем компьютере, у вас может быть другой)
— %%a — день
— %%b — месяц
— %%c — год
— %%d — часы
— %%e — минуты
— %%f — секунды
— %%g — сотые
Так как время 21.01.2010 21:48:50,23 из формата ДД.ММ.ГГГГ чч:мм:сс,сд надо перевести в формат ГГГГММДД_ччмм, надо взять значения переменных из списка выше в следующем порядке
— %%c — год
— %%b — месяц
— %%a — день
— %%d — часы
— %%e — минуты

В результате получим строку вида 20100121_2148.

Этот скрипт не универсальный, он системно-зависимый: порядок отдельных частей даты и времени зависит от текущих установок на компьютере (национальные, пользовательские настройки).

Aнализ текущего времени
На форуме был задан вопрос как проанализировать текущее время:

. нужно в процессе выполнения скрипта проанализировать текущее время, если текущее время меньше 15:00 , то пропускаем (по goto) определённую строку (блок).

Используем раскрытие переменных с заменой подстроки — берем значение переменной TIME, производим замену пробела нулем и полученную строку сравниваем с заданной строкой времени. Так как сравнение производится лексикографически (википедия), то алгоритм выполнится корректно

источник

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

Update: теперь, когда это 2016 год, я бы использовал PowerShell для этого, если только для этого нет действительно убедительной обратной совместимой причины, особенно из-за проблемы с региональными настройками с использованием date . См. @npocmaka по https://stackoverflow.com/a/19799236/8479

что такое оператор(ы) командной строки Windows, который я могу использовать для получения текущей даты и времени в формате, который я могу поместить в имя файла?

Я хочу иметь .bat-файл, который застегивает каталог на молнию архив с текущей датой и временем в составе имени, например, Code_2008-10-14_2257.zip . Есть ли простой способ сделать это, независимо от региональных настроек машины?

Я действительно не возражаю против формата даты, в идеале это было бы yyyy-mm-dd, но все просто отлично.

пока у меня есть это, что на моей машине дает мне Tue_10_14_2008_230050_91 :

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

Я использую Windows Server 2003 и Windows XP Professional. Я не хочу устанавливать дополнительные утилиты для достижения этой цели (хотя я понимаю, что есть некоторые, которые сделают хорошее форматирование даты).

Читайте также:  Установка автостекол в слониме

26 ответов:

Если вы предпочитаете время в 24-часовом / военном формате, вы можете заменить вторую строку на эту:

Если вы хотите дату независимо от региона день/месяц заказа, вы можете использовать «WMIC os GET LocalDateTime» в качестве источника, так как он находится в ISO порядок:

C: тест>.cmd
Локальная дата-это [2012-06-19 10:23:47.048]

региональный независимый разбор даты и времени

выходной формат %DATE% и dir команда зависит от региона и, следовательно, не является ни надежной, ни умной. дата.exe (часть UnxUtils) предоставляет любую информацию о дате и времени в любом мыслимом формате. Вы также можете извлечь информацию о дате / времени из любого файла с помощью date.exe .

примеры: (в cmd-скрипте используйте %% вместо %)

date.exe +»%Y%m%d %H%M%S: Any text»
20091222 185503: любой текст

date.exe +»Text: %y/%m/%d-any text-%H.%M»
Текст: 09/12/22-любой текст-18.55

Command: date.exe +»%m-%d «»»%H %M %S «»»»
07-22 «18:55:03″`

информация о дате / времени из файла ссылки:
date.exe -r c:\file.txt +»The timestamp of file.txt is: %Y-%m-%d %H:%M:%S»

используя его в сценарии CMD, чтобы получить информацию о годе, месяце, дне, времени:

использовать его в сценарии CMD, чтобы получить метку времени в любом требуемом формате:

извлечение информации о дате / времени из любого справочного файла.

добавление в файл информации о дате/времени:

дата.ехе часть свободных инструментов GNU которые не нуждаются в установке.

копирование date.exe в любой каталог, который находится в пути поиска может привести к сбою других сценариев, которые используют встроенный в Windows date команда.

еще два способа, которые не зависят от настроек времени (взято из : как получить данные / время независимо от локализации:). И как же сделать день недели, и ни один из них не требует разрешения администратора!:

MAKECAB — будет работать на каждой системе Windows (быстро, но создает небольшой временный файл) (скрипт foxidrive):

ROBOCOPY — это не родная команда для Windows XP и Windows Server 2003, но это может быть загружено с сайта microsoft. Но встроен во все, начиная с Windows Vista и выше:

и еще три способа, которые используют другие языки сценариев Windows. Они дадут вам больше гибкости, например, вы можете получить неделю в году, время в миллисекундах и так далее на.

JScript / batch гибрид (нужно сохранить как .bat ). JScript доступен в каждой системной форме NT и выше, как часть Windows Script Host (хотя можно отключить через реестр это редкий случай):

VSCRIPT / BATCH гибридный (можно ли внедрить и выполнить VBScript в пакетном файле без использования временный файл?) тот же случай, что и JScript, но гибридизация не так совершенна:

PowerShell — может быть установлен на каждой машине, которая имеет .NET-скачать с Microsoft ( v1, v2, v3 (только для Windows 7 и выше)). Он устанавливается по умолчанию на все Windows 7 и Windows Server 2008 и выше:

чтобы использовать его из пакета файл:

Самокомпилируется jscript.net/batch (никогда не видел машину Windows без .NET, поэтому я думаю, что это довольно портативный):

Логман это не может получить год и день недели. Он сравнительно медленный, а также создает временный файл и основан на отметках времени, которые logman помещает в свои файлы журналов. Он будет работать на все, начиная с Windows XP и выше. Наверное никогда не будет использоваться никем-включая меня-но это еще один способ.

еще один способ с WMIC который также дает неделю года и день недели, но не миллисекунды (для миллисекунд проверьте ответ foxidrive):

используя TYPEPERF С некоторыми усилиями, чтобы быть быстрым и совместимым с различными языковыми настройками и так же быстро, как возможно:

MSHTA позволяет вызывать методы JavaScript, аналогичные методу JScript, показанному в #3 выше. Имейте в виду, что свойства объекта даты JavaScript, включающие значения месяца, нумеруются от 0 до 11, а не от 1 до 12. Таким образом, значение 9 означает октябрь.

вот вариант из alt.рекламного.партия.nt, который работает локально-независимо.

поместите это в текстовый файл, например getDate.cmd

чтобы получить код для работы без ошибок msg в stderr, мне пришлось добавить одинарные кавычки вокруг назначений переменных для %%a, %%b и %%c. моя локаль (PT) вызывала ошибки на одном этапе в цикле/разборе, где выполнялись такие вещи, как «set =20». Котировки дают токен (хотя и пустой) для левой стороны оператор присваивания.

недостатком является беспорядочные имена переменных локали:’ yy’,’ mm ‘и’dd’. Но эй, какая разница!

источник

Добавить комментарий

Adblock
detector