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

Чтобы создать из командной строки файл с именем равным текущей дате и времени создадим 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

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

  1. @ Ринат:
    не согласен, уважаемый 🙂
    начиная от команды (md — это создание каталога, а не файла), заканчивая тем, что такой командой создадите в лучшем случае файл типа «15.03.2011.txt», в худшем случае «Вт 15.03.2011.txt». В зависимости от региональных установок.

  2. оч помогло ! Толковей не читал еще ! «•В переменную ddd из переменной с датой dd получаем теекущее число. Команда %dd:~0,2% значит взять из переменной dd 2 символа с начала строки (0 это первый символ строки). «

  3. +5 отличный материал )) может еще кто подскажет в чем разница почему в файле *.bat (по привычке) это не работает а *.cmd все ок ….. в чем разница?

  4. будет совсем отлично если подскажете как реализовать перенаправление результата выполненной программы в файл с текущей датой и временем) заранее спасибо!

  5. @ anonimvasil:
    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%

    programma.cmd > %day%%month%%year%_%hour%%minute%%sec%.txt

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

    @echo
    @echo off

    d:\cmd\1\changeip.exe

    @echo off

    echo 0|d:\cmd\1\test\program.exe -i 192.168.0.5 -m 00:00:00:00:00:00 >d:\cmd\1\log.txt 2>&1

    в процессе выполнения program.exe постоянно возникает необходимость ввода переменных параметров вида 00:00:00:00:00:00, которые следуют за флагом -m, так вот вопрос как сделать чтобы перед выполнением программы начинался диалог с пользователем, который требовал бы ввода данных следующих за символом -m, а уже потом выполнялась сама программа так как будто эти все параметры были присвоены ей изначально

    если это невозможно реализовать батником натолкните на мысль пожалуйста, заранее спасибо))

  7. Здравствуйте!
    У меня не работает данный скрипт с 8 по 10 число каждого месяца.
    Выдает сообщение следующего содержания:

    c:\Work\sklad\Export>rem @echo off
    c:\Work\sklad\Export>set dd=08.01.2014
    c:\Work\sklad\Export>set tt=13:39:36,79
    c:\Work\sklad\Export>set /a ddd=08
    Неправильное число. Числовые константы должны быть десятичными (17)
    шестнадцатеричными (0x11),или восьмеричными (021).
    Непредвиденное появление: 10.
    c:\Work\sklad\Export>IF LSS 10 (
    c:\Work\sklad\Export>

    Помогите побороть эту ошибку.
    Спасибо.

  8. @ Андрей:
    Он пытается строку ’08’ перевести в число. К сожалению коммандная строка Windows не на столько «умная». Я у себя уже давно переделал так:

    rem @echo off
    set dd=%DATE%
    set tt=%TIME%
    
    SET day=%dd:~0,2%
    set month=%dd:~3,2%
    set year=%dd:~6,4%
    
    SET hour=%tt:~0,2%
    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
    
  9. У такого подхода есть один минус — если текущее число меньше 10, то в наименовании файла будет лишний пробел, что-то типа » 8 12014_16:10:30.txt»

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

    copy nul %year%%month%%day%_%hour%%minute%%sec%.txt
    
  10. Еще вопрос.
    Этот скрипт не хочет работать при времени меньще 10 часов, хотя в региональных параметрах формат времени выставлен «HH:mm:ss»

    c:\Work\sklad\Export>ren c:\work\sklad\export\temp.arj 2014.01.10_ 4.36.arj
    Ошибка в синтаксисе команды.

    В чем может быть причина?

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *