Командный файл windows дата

Командный файл windows дата

Хотел бы обратить ваше внимание на то, что если в номере месяца, дня или данных времени присутствует ведущий ноль — он должен быть удален перед выполнением арифметических действий. Это делается потому, что в bat файлах числа (не строки!), начинающиеся с 0, считаются восьмеричными. Следовательно такие числа, как 08 и 09 не имеют смысла, так как цифр 8 и 9 нет в восьмеричной системе счисления.
Не забывайте об этом при арифметической обработке данных!
Вместо проверки и удаления ведущих нулей, учитывая, что эти числа меньше ста, можно использовать следующий прием:

Итак, рассмотрим некоторые примеры решения задач, связанных с обработкой даты и/или времени.

Определения названия дня недели по номеру дня в неделе.

Еще один вариант решения этой задачи:

Пример вызова аналогичен предыдущему.
Написать процедуру получения имени месяца по его номеру, думаю, уже не составит труда.

Удаление файлов с истекшим временем хранения

В следующем примере из заданной папки (OTKUDA) по требуемой маске (MASK) удаляются файлы, которые были созданы более определенного количества дней назад (N).

ta call :raschet !filedate:

0,10! days_to_date_of_file set /a raznitsa=%days_to_today%-!days_to_date_of_file! if !raznitsa! gtr %N% del /q «%%a» ) popd exit :raschet for /f «delims=. tokens=1-3» %%a in (‘echo %

1′) do ( set /a years=%%c*365+%%c/4 set /a prev_year=%%c-1 set /a result_year=%%c/4 set /a result_prev_year=!prev_year!/4 set /a vis=!result_year!-!result_prev_year! if !vis!==1 ( if %%b==01 set /a years=!years!-1 if %%b==02 set /a years=!years!-1 ) if %%b==01 set months=0 if %%b==02 set months=31 if %%b==03 set months=59 if %%b==04 set months=90 if %%b==05 set months=120 if %%b==06 set months=151 if %%b==07 set months=181 if %%b==08 set months=212 if %%b==09 set months=243 if %%b==10 set months=273 if %%b==11 set months=304 if %%b==12 set months=334 set days=%%a set firstsym=!days:

0,1! if !firstsym!==0 set days=!days:

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

Посмотрел внимательно предыдущий пример и переделал его.
Теперь он не занимает и 40 строк. И, безусловно, его еще можно сократить! Если поставить именно такую цель. В данном же случае цель примеров — показать возможности и различные приемы написания bat файлов. По той же причине предыдущий пример пока не удалил, так как, на мой взгляд, он легче для понимания.

ta call :raschet !filedate:

0,10! days_to_date_of_file set /a raznitsa=%days_to_today%-!days_to_date_of_file! if !raznitsa! gtr %N% del /q «%%a» ) popd exit :raschet for /f «delims=. tokens=1-3» %%a in (‘echo %

1′) do ( set /a years=%%c*365+%%c/4 set /a prev_year=%%c-1 set /a result_year=%%c/4 set /a result_prev_year=!prev_year!/4 set /a vis=!result_year!-!result_prev_year! set numm=%%b if «!numm:

0,1!» == «0» set numm=!numm:

1,1! if !vis!==1 ( if !numm! LSS 3 set /a years=!years!-1 ) call :Day2Num !numm! months set days=%%a if «!days:

0,1!» == «0» set days=!days:

2=!years!+!months!+!days! ) exit /b 0 :Day2Num %d% day for /f «tokens=%1» %%I in ^ (‘echo 0 31 59 90 120 151 181 212 243 273 304 334’) ^ do set /a %2=%%I exit /b 0

Читайте также:  Что такое семафоры linux

В этом примере подпрограмма Day2Num в некоторой степени имитирует работу с массивом констант.))

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

В приведенном участке кода из папки C:\source_folder удаляются файлы, возраст которых больше 7 дней.

В том же пакете Resource Kit, а начиная с Windows VISTA — как стандартный компонент, есть и более приспособленная для этого утилита — forfiles.
Надо заметить, что параметры этой программы. как бы так сказать. несколько нестандартные. Но ряд преимуществ, которые она дает, стоят того, чтобы в них разобраться. Для решения нашей задачи используется следующий вызов:

Подробнее о параметрах forfiles смотрите тут.

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

Новый раздел о средствах командной строки в рамках этого же проекта расположен здесь

Командный файл windows дата

Сообщения: 3
Благодарности: 0

Сообщения: 26991
Благодарности: 7877

Конфигурация компьютера
Материнская плата: Asrock Motherboard N68-VS3 UCC
HDD: Seagate ST500DM002-1BC142
Монитор: LG w2243s
» width=»100%» style=»BORDER-RIGHT: #719bd9 1px solid; BORDER-LEFT: #719bd9 1px solid; BORDER-BOTTOM: #719bd9 1px solid» cellpadding=»6″ cellspacing=»0″ border=»0″>

Сообщения: 522
Благодарности: 34

——-
консольный клиент telegram для Windows: www.elapser.info

Конфигурация компьютера
Материнская плата: Asrock Motherboard N68-VS3 UCC
HDD: Seagate ST500DM002-1BC142
Монитор: LG w2243s
» width=»100%» style=»BORDER-RIGHT: #719bd9 1px solid; BORDER-LEFT: #719bd9 1px solid; BORDER-BOTTOM: #719bd9 1px solid» cellpadding=»6″ cellspacing=»0″ border=»0″>

Сообщения: 26991
Благодарности: 7877

Добавление даты в любом формате в имя файла или папки через cmd

Добавление даты в имя файла или папки — несложная задача. Интереснее становится, когда дату нужно записать строго в определённом формате. Из этой статьи вы узнаете, как задавать файлам и каталогам имена с датой в любом виде.

Читайте также:  Формат векторного изображения windows

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

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

Для перевода дат в именах файлов я использовал значение текущей даты в Windows, которое записывается в виде dd.mm.yyyy. При этом отметим, что эта дата это десять символов (точки считаются), которые пронумерованы системой начиная с нуля.

создаёт переменную CURDATE (от current date) и задаёт ей значение текущей даты. Имя переменной можно выбрать произвольно, хватит и любой буквы. Кроме того, переменную можно специально и не задавать, а использовать текущую дату. Но об этом позднее.

Далее идёт команда переименования ren (или rename ). Можно использовать оба варианта написания команды. Синтаксис её выглядит так:

ren [путь_к_файлу]\[старое_имя_файла] [новое_имя_файла]

Ограничением команды rename является то, что при переименовании нельзя указать новый путь к файлу. То есть это именно переименование, а не копирование с новым именем и не перемещение с переименованием. Но, так как мне нужно было только переименовать файлы, этот вариант подходил. Далее также разберем и другие команды.

Теперь непосредственно о команде переименования:

Как видим, мы берем файл primer_%date%.zip из каталога C:\Backups\ для переименования. Например, созданный сегодня файл будет иметь имя primer_07.11.2018.zip, а завтрашний primer_08.11.2018.zip. В нашем случае это ежедневные резервные копии. Новое имя, возможно, выглядит страшно и требует расшифровки.

8,2% — берем два символа из CURDATE , начиная с восьмого;

3,2% — берем два символа из CURDATE , начиная с третьего;

0,2% — берем два символа из CURDATE , начиная с нулевого.

Напомню, что CURDATE представляет собой последовательность из десяти символов, пронумерованных от нуля до девяти, и в общем виде представляет собой текущую дату в виде dd.mm.yyyy. Таким образом, в нашем примере:

два символа с восьмого — 18;

два символа с третьего — 11;

два символа с нулевого — 07.

В итоге, файл primer_07.11.2018.zip превращается в d_181107_primer.zip. Что касается буквы d, то это просто указатель ежедневной копии, который я оставил в примере, чтобы показать, что можно спокойно дописывать любые символы до и после формируемой нами даты.

В конце скрипта очистим значение CURDATE

Переменную можно было и не задавать. Тогда бы мы обошлись одной строкой:

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

Как я уже говорил, вы можете записывать дату в имени файла по своему усмотрению не только при переименовании. Например, команда для создания каталога mkdir (или md ):

Здесь мы обозвали переменную не CURDATE , а просто a . Второй командой мы создали на диске C каталог с именем вида mmdd (месяц, день).

Читайте также:  Windows маршрут через интерфейс

Переименование можно делать и командой move .

Этими командами мы переименовали файл primer.txt в текущем каталоге в файл primer_07_11_2018.txt (при другой дате на календаре, конечно, будет другое имя). Думаю, синтаксис уже должен быть вам понятен: два символа с нулевого, два символа с третьего и четыре с шестого.

Но, вообще, команда move это, конечно, больше про перемещение файлов и папок. Конечно же, задавать имена с датой в любом формате можно и при перемещении.

Кстати, в самом первом примере мы находили нужным нам файл с датой в имени, которая была записана в правильной по российским нормам последовательности dd.mm.yyyy, но ведь она может быть записана и другим способом. Что если в имени файла у нас только месяц и последние две цифры года? А мы хотим поставить сначала год, потом месяц, да ещё и разделить их символом _ для лучшей читаемости.

Как и в команде move , если путь к файлу или каталогу не задан явно, речь идёт о текущем каталоге. Ну и не забывайте очищать значение переменной (на самом деле, переменные, задаваемые командой set , действуют только на протяжении командной сессии, в которой они были заданы 😉 ).

Возврат даты модификации файла в CMD

Запуск cmd файла с определенного места в его коде из другого cmd файла
Здравствуйте. Требуется команда для запуска батника с метки внутри него, а не с первой команды в.

Копирование папки с датой модификации на день раньше текущей даты
Доброго времени суток, коллеги! Можете подсказать как можно скопировать каталог с неважно каким.

Распределение по папкам и переименование JPG-файлов на основе даты их создания или модификации
В папке много .jpg файлов, хочется организовать их исходя из Даты Создания (Модификации) в.

Поиск файла по дате модификации
Здравствуйте! Нужна помощь в решении следующей задачи. «Разработать командный файл, который бы.

Решение

Ддя этого переменная «X» собственно не нужна. Всё делается в одну строку.

Код командной строки:

Код пакетного файла:

ComSpec, большущее спасибо.
Я пытаюсь кое-как осваивать CMD и т.п. Ограничен в понимальных возможностях, к сожалению(, но пытаюсь! Пытаюсь!
Будьте добры, растолкуйте детально ваш скрипт.
И, если не затруднит, каков был бы скрипт с использованием переменных? Или с переменными нерешаемо?

Добавлено через 14 минут
Почитал о команде FOR. Понятного не много (для меня). Когда искал решение наткнулся на команду FORFILES, но как оказалось она внешняя и к тому же оперирует только батниками. (По крайней мере так было сказано в описании).

Решение

ti»), которую передаём на разбор с помощью второго «for». Для разбора во втором цикле создаём строку «%date% %

ti», которая при раскрытии переменных будет иметь примерный вид «26.05.2015 26.11.2014 14:42». Поскольку нам надо сравнить месяц и год, то выделяем соответсвующие токены (2, 3, 5, 6), а разделителями будут точка и пробел (также в перечень разделителей добавлены дефис и слеш на случай другого формата даты). Далее сравниваются две пары (2-ой и 3-ий токены с 5-ым и 6-ым токенами), и по результату проверки истинности условия выполняется или не выполняется команда.

Варианты кода для пакетного файла:

Вариант для командной строки (также с лексикографическим сравнением):

t» для переменных цикла при использовании «FOR» расширяет переменную до даты и времени модификации вместе.

Оцените статью