Date bat файл


windows - Как создать папку с именем в качестве текущей даты в пакетных (.bat) файлах

Это зависит от региональных настроек компьютера, поэтому сначала проверьте вывод даты в командной строке или сделайте эхо даты.

Для этого создайте командный файл и добавьте нижеприведенный контент

echo %date%<br\> pause

Он производит вывод, в моем случае это показывает Пт 05/06/2015.

Теперь нам нужно избавиться от косой черты (/)

Для этого включите приведенный ниже код в пакетном файле.

set temp=%DATE:/=%

если вы повторяете "temp", вы можете видеть дату без косой черты.

Теперь вам нужно всего лишь форматировать дату так, как вы хотите.

Например, мне нужна дата в формате YYYYMMDD, тогда мне нужно установить имя dirname ниже

Чтобы объяснить, как это работает, нам нужно сравнить значение temp

Fri 05062015.

теперь поместите все символы с номерами, начинающимися с 0.

Пт 0506201 5

01234567891011

Итак, для формата даты, который мне нужен, 20150605,

2015 год, в котором 2 находится на восьмом месте, поэтому с 8-й позиции до 4-х мест он достигнет 2015 года.

Месяц 06, в котором 0 находится на шестой позиции, поэтому с 6-й позиции до 2-х мест он составит 06.

День 05, в котором 0 находится в 4-й позиции, поэтому с 4-го положения до 2-х мест он будет делать 05.

Итак, чтобы настроить окончательный формат, мы имеем ниже.

SET dirname="%temp:~8,4%%temp:~6,2%%temp:~4,2%"

Чтобы увеличить формат даты с помощью "-" или "_" между датой, месяцем и годом, вы можете изменить ниже

SET dirname="%temp:~8,4%-%temp:~6,2%-%temp:~4,2%"

или

SET dirname="%temp:~8,4%_%temp:~6,2%_%temp:~4,2%"

Таким образом, окончательный код партии будет

=============================================== =======

@echo off<br\> set temp=%DATE:/=%<br\> set dirname="%temp:~8,4%%temp:~6,2%%temp:~4,2%"<br\> mkdir %dirname%<br\>

=============================================== =======

Каталог будет создан в том месте, где выполняется эта партия.

qaru.site

Как создать файл с именем равным текущей дате и времени |

Чтобы создать из командной строки файл с именем равным текущей дате и времени создадим cmd файл с таким содержимым:

rem @echo off set dd=%DATE% set tt=%TIME% set /a ddd=%dd:~0,2% IF %ddd% LSS 10 ( SET day=0%ddd%) else ( SET day=%ddd%) set month=%dd:~3,2% set year=%dd:~6,4% set /a ttt=%tt:~0,2% IF %ttt% LSS 10 ( SET hour=0%ttt%) else ( SET hour=%ttt%) SET minute=%tt:~3,2% SET sec=%tt:~6,2% echo %day% %month% %year% %hour% %minute% %sec% copy nul %day%%month%%year%_%hour%%minute%%sec%.txt

Необходимо помнить, что получение даты и времени зависит от региональных настроек Windows. Поэтому первая строка закомментирована для возможности смотреть на результат каждой команды.Рассмотрим команды.

  • В переменные dd и tt получаем текущую дату и время.
  • В переменную ddd из переменной с датой dd получаем теекущее число. Команда %dd:~0,2% значит взять из переменной dd 2 символа с начала строки (0 это первый символ строки). Например, на моем компьютере числа всегда двучначные и я не нуждаюсь в такой проверке и эта конструкция у меня заменяется на команду set day=%dd:~0,2%
  • Далее с 7 по 9 строку кода идет проверка текущего числа. Если число меньше 10, то начале числа добавляем символ 0. Это надо на случай если у нас дата выглядит например так: 1.12.2010. Чтобы все составляющие даты были одинаковой длины. Тут же получаем готовую переменную day, в которой хранится значение текущего числа
  • Строка 10. В переменную month из dd получаем текущий месяц. Берем два символа, начиная с третьего. Здесь можно так же как и с числом сделать проверку на меньше или больше 10. Но у меня почему-то на всех компах месяц всегда двузначный. Но этот момент надо учитывать.
  • Строка 11. В переменную year из dd получаем текущий год. Для этого берем 4 символа, начиная с шестого. Вообще с какого символа брать и сколько символов надо брать, легко отследить после команд из 3 и 4 строк кода. После выполнения cmd файла смотрим какие строки выдает ОС и отсчитываем с какого символа идет число, месяц и год.
  • Со строки 13 по 20 описаны аналогичные действия по получению текущего времени в переменные hour, minute и sec.

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

copy nul %day%%month%%year%_%hour%%minute%%sec%.txt

создает пустой текстовый файл 09092010_102428.txtДля создания архивов я обычно делаю чтобы год был в начале имени файла, затем месяц, а уже потом число. Это удобно для сортировки архивов.

copy nul %year%%month%%day%_%hour%%minute%%sec%.txt

Результат такой команды: 20100909_102441.txt

www.procomp-blog.ru

WindowsFAQ.ru

Достаточно часто необходимо создавать папку с именем равным текущей дате и затем копировать в нее, например, бэкап. Есть насколько вариантов создания такой папки:

MD %SYSTEMDRIVE%\%date:~-10%

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

md %systemdrive%\%date:~0,2%_%date:~3,2%_%date:~6,4%

или

md %systemdrive%\%date:~6,4%_%date:~3,2%_%date:~0,2%

Во втором случае, папки будут сортироваться по алфавиту.

Как вариант, можно рассмотреть добавление к имени файла текущей даты:

@echo off for /F "tokens=1-4 usebackq delims=. " %%1 in (`date /t`) do set mydate=%%4.%%3.%%2 ren test.txt test%mydate%.txt

Имя файла test.txt будет переименовано в test2005.03.05.txt

zoNUDa

создано: 09-12-2007 23:43

Необходимо написать бат файл, распаковывающий файлы архива в папки, названные их расширением.
rjEugen

создано: 24-02-2008 16:57

Здравствуйте, уважаемые. С прошедшим 23.02. Сразу оговорюсь, я не программист, просто аналогичная задача, только в имя папки нужно добавить время. Объемы - небольшие, поэтому места для таких бэкапов есть. А потеря этих файлов приводит к потере гигабайт ценной информации (кто знает eMule - поймет меня). В bat файле пользуюсь такой командой xcopy D:\eMule\Temp\*.met D:\eMule\bak\%DATE%\ работает, но хотелось бы оживить такой вариант: xcopy D:\eMule\Temp\*.met D:\eMule\bak\%DATE%\%TIME%\ Из-за того, что разделители времени - ":", папка не создается. Кто подскажет, как быть?
sweet

создано: 25-02-2008 09:58

rjEugen rem время с точками set mytime=%time%set mytime=%mytime:~0,2%.%mytime:~3,2%.%mytime:~6,2%echo %mytime%rem время без точекset mytime=%time%set mytime=%mytime:~0,2%%mytime:~3,2%%mytime:~6,2%echo %mytime%

далее подставляй куда нужно переменную %mytime%Имей ввиду формат времени hh:mm:ss зависит о региональных настроек, для USA будет по-другому,также как и дата.

fokk

создано: 01-04-2008 11:32

Вопрос. очень нужен ответ! как написать скажем... %date:~3,2% - это этот месяц (например 05), так вот... как написать чтобы было не 05 а 04.. тоесть как написать чтобы в мае создавать папки с апрелем, в июне с маем итд..
sweet

создано: 02-04-2008 09:10

fokk А самому подумать и написать влом да? Всё на дядей надеешься?@echo onset dd=%date:~3,2%if "%dd%" == "04" ( set newdd=03)rem и так далее для 01 по 12 ECHO %newdd%pauseесли на нули в номере месяца наплевать, можно проще@echo onset dd=%date:~3,2%echo %dd%set /a newdd=dd-1if "%dd%"=="01" ( set newdd=12) ECHO %newdd%pause
Berline

создано: 10-11-2008 14:05

Вопрос про скрипт Solander'а:

Цитата:

:: КОД ОШИБКИ "0", ошибок нет, значит можно удалить старый бэкап. :done :: СЧИТАЕМ И УДАЛЯЕМ КАТАЛОГ С БЭКАПОМ, СОЗДАННЫЙ НЕДЕЛЮ НАЗАД set T_Date=%DATE% IF %T_DATE:~0,1%==0 ( SET /A T_DAY=%T_DATE:~1,1%) else ( SET /A T_DAY=%T_DATE:~0,2%)

IF %T_DATE:~3,1%==0 ( SET /A T_MONTH=%T_DATE:~4,1%) else ( SET /A T_MONTH=%T_DATE:~3,2%) SET /A T_YEAR=%T_DATE:~6,4%

:: ТУТ МЕНЯЕМ ЧИСЛО, ЗА СКОЛЬКО ДНЕЙ НАЗАД БУДЕМ ПОКАЗЫВАТЬ ДАТУ (до 28 дней, т.к. скрипт, при "отрицательном" дне всегда делает - 1 месяц) SET /A T_DAY=%T_DAY%-7

IF %T_DAY% LEQ 0 SET /A T_MONTH=%T_MONTH%-1 IF %T_MONTH%== 0 SET /A T_YEAR=%T_YEAR%-1 IF %T_MONTH%== 0 SET /A T_MONTH=12 if %T_MONTH%==1 Set /A DIM=31 if %T_MONTH%==2 Set /A DIM=28 if %T_MONTH%==3 Set /A DIM=31 if %T_MONTH%==4 Set /A DIM=30 if %T_MONTH%==5 Set /A DIM=31 if %T_MONTH%==6 Set /A DIM=30 if %T_MONTH%==7 Set /A DIM=31 if %T_MONTH%==8 Set /A DIM=31 if %T_MONTH%==9 Set /A DIM=30 if %T_MONTH%==10 Set /A DIM=31 if %T_MONTH%==11 Set /A DIM=30 if %T_MONTH%==12 Set /A DIM=31 IF %T_DAY% LEQ 0 SET /A T_DAY=%T_DAY%+%DIM% IF %T_DAY% LSS 10 SET T_DAY=0%T_DAY% IF %T_MONTH% LSS 10 SET T_MONTH=0%T_MONTH%

set FolderName=%T_YEAR%%T_MONTH%%T_DAY%

:: Удалям, собственно... echo ...Removing old backup files. Please wait... rd \\10.7.0.2\Backup_1\Рабочие_объекты\%FolderName% /s /q

net send 10.7.0.8 Резервное копирование прошло успешно!

goto exit

:exit

Если папка по дате (к примеру 081110) создаётся каждый день, то всё замечательно, а если только по будням - то получаются ошибки, мол папки нет, и т.д.

Не подскажете, как организовать проверку, чтоб

IF EXIST %FolderName% ( goto ***метка туда, где удаляем папку*** ) ELSE ( ??? )

проверял наличие папки, если она отсутствует - делал SET /A T_DAY=%T_DAY%-7 (потом -6, -5), и до тех пор, пока не будет найдена существующая папка?

Как я понимаю, необходим цикл, For - Но с ним я пока так и не разобралси...

Solander

создано: 05-12-2008 14:21

Ну... Ошибка... нечего удалять, -7 выпало на выходной... Через день или два будет удален понедельничий бэкап. В чем проблема-то? Новый-то уже создан!Ап: Стой Стой Стой! Мой скрипт не проверяет папку, которую удаляет! Он ее тихо убивает, есть она там, нет ее там. Сообщение об ошибке в студию! Какая ось кстати? У меня работает на 2003 Сервере, все сетевые папки подключены, пароли в кеше. Почитай внимательней скрипт, сообщения о ненайденных файлах когда может быть. Это те, что копируешь. Проверь подключены ли сетевые папки, права на запись. Правильно ли путь ввел, наконец.

www.windowsfaq.ru