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

В статье новая математическая математика Java, часть 2: числа с плавающей запятой из IBM предлагает следующий фрагмент кода для решения этой проблемы (в поплавках, но я подозреваю, что это работает и для удвоений):

public class FloatCounter {

    public static void main(String[] args) {
        float x = 1.0F;
        int numFloats = 0;
        while (x <= 2.0) {
            numFloats++;
            System.out.println(x);
            x = Math.nextUp(x);
        }
        System.out.println(numFloats);
    }
}

У них есть этот комментарий об этом:

Оказывается, ровно 8,388,609 поплавок от 1,0 до 2,0 включительно; большая, но едва ли бесчисленная бесконечность вещественных чисел, существующих в этом диапазоне. Последовательные числа составляют около 0,0000001 друг от друга. Это расстояние называется ULP для единицы наименьшей точности или единицы в последнем месте.

505
задан Peter Mortensen 15 July 2017 в 11:37
поделиться

10 ответов

См. Windows Batch File (.bat) для получения текущей даты в формате MMDDYYYY:

@echo off
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%c-%%a-%%b)
For /f "tokens=1-2 delims=/:" %%a in ('time /t') do (set mytime=%%a%%b)
echo %mydate%_%mytime%

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

For /f "tokens=1-2 delims=/:" %%a in ("%TIME%") do (set mytime=%%a%%b)

C:>.\date.bat
2008-10-14_0642

, Если Вы хотите дату независимо от порядка дня/месяц региона, можно использовать "WMIC, OS ПОЛУЧАЕТ LocalDateTime" как источник, так как это находится в порядке ISO:

@echo off
for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE 2^>NUL`) do if '.%%i.'=='.LocalDateTime.' set ldt=%%j
set ldt=%ldt:~0,4%-%ldt:~4,2%-%ldt:~6,2% %ldt:~8,2%:%ldt:~10,2%:%ldt:~12,6%
echo Local date is [%ldt%]

C:> test.cmd
Локальная дата является [19.06.2012 10:23:47.048]

642
ответ дан Peter Mortensen 15 July 2017 в 11:37
поделиться

Это - то, что я использовал:

::Date Variables - replace characters that are not legal as part of filesystem file names (to produce name like "backup_04.15.08.7z")
SET DT=%date%
SET DT=%DT:/=.%
SET DT=%DT:-=.%
<час>

, Если Вы хотите дальнейшие идеи для автоматизации резервных копий на архивы С 7 zip, у меня есть свободный/открытый проект, который можно использовать или рассмотреть для идей: http://wittman.org/ziparcy/

5
ответ дан Peter Mortensen 15 July 2017 в 11:37
поделиться

Это не действительно более кратко, но могло бы быть более гибким путем ( кредит ):

FOR /F "TOKENS=1* DELIMS= " %%A IN ('DATE/T') DO SET CDATE=%%B
FOR /F "TOKENS=1,2 eol=/ DELIMS=/ " %%A IN ('DATE/T') DO SET mm=%%B
FOR /F "TOKENS=1,2 DELIMS=/ eol=/" %%A IN ('echo %CDATE%') DO SET dd=%%B
FOR /F "TOKENS=2,3 DELIMS=/ " %%A IN ('echo %CDATE%') DO SET yyyy=%%B
SET date=%mm%%dd%%yyyy%
13
ответ дан sblom 15 July 2017 в 11:37
поделиться

К сожалению, это не неуязвимо для региональных настроек, но это делает то, что Вы хотите.

set hour=%time:~0,2%
if "%time:~0,1%"==" " set hour=0%time:~1,1%
set _my_datetime=%date:~10,4%-%date:~4,2%-%date:~7,2%_%hour%%time:~3,2%

Удивительный материал можно найти на Википедия .

24
ответ дан Mark Ransom 15 July 2017 в 11:37
поделиться

Иначе ( кредит ):

@For /F "tokens=2,3,4 delims=/ " %%A in ('Date /t') do @( 
    Set Month=%%A
    Set Day=%%B
    Set Year=%%C
)

@echo DAY = %Day%
@echo Month = %Month%
@echo Year = %Year%

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

15
ответ дан J c 15 July 2017 в 11:37
поделиться

I use this (again not region independent (UK))

set bklog=%date:~6,4%-%date:~3,2%-%date:~0,2%_%time:~0,2%%time:~3,2%
35
ответ дан 22 November 2019 в 22:31
поделиться
"d:\Program Files\7-Zip\7z.exe" a -r code_%date:~10,4%-%date:~4,2%-%date:~7,2%.zip
14
ответ дан 22 November 2019 в 22:31
поделиться

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

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

Примеры: (в командной строке используйте %% вместо %)

date.exe +"%Y-%m-%d"
2009-12-22

date.exe +"%T"
18:55:03

date.exe +"%Y%m%d %H%M%S: Любой текст"
20091222 185503: Любой текст

дата.exe +"Текст: %y/%m/%d-any text-%H.%M"
Text: 09/12/22-any text-18.55

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

Информация о дате/времени из справочного файла:
date.exe -r c:\file.txt +"Штемпель времени файла. txt is: %Y-%m-%d %H:%M:%S"

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

for /f "tokens=1,2,3,4,5,6* delims=," %%i in ('C:\Tools\etc\date.exe +"%%y,%%m,%%d,%%H,%%M,%%S"') do set yy=%%i& set mo=%%j& set dd=%%k& set hh=%%l& set mm=%%m& set ss=%%n

Использование в CMD-скрипте для получения метки времени в любом требуемом формате:

for /f "tokens=*" %%i in ('C:\Tools\etc\date.exe +"%%y-%%m-%%d %%H:%%M:%%S"') do set timestamp=%%i

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

for /f "tokens=1,2,3,4,5,6* delims=," %%i in ('C:\Tools\etc\date.exe -r file.txt +"%%y,%%m,%%d,%%H,%%M,%%S"') do set yy=%%i& set mo=%%j& set dd=%%k& set hh=%%l& set mm=%%m& set ss=%%n

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

for /f "tokens=*" %%i in ('C:\Tools\etc\date.exe -r file.txt +"%%y-%%m-%%d.%%H%%M%%S"') do ren file.txt file.%%i.txt

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

ПРИМЕЧАНИЕ: Копирование date.exe в любой каталог, находящийся в пути поиска, может привести к отказу других сценариев, использующих встроенную в Windows команду date.

.
106
ответ дан 22 November 2019 в 22:31
поделиться

Короткий ответ :

 :: Start - Run , type:
 cmd /c "powershell get-date -format ^"{yyyy-MM-dd HH:mm:ss}^"|clip"

 :: click into target media, Ctrl + V to paste the result 

Длинный ответ

    @echo off
    :: START USAGE  ==================================================================
    ::SET THE NICETIME 
    :: SET NICETIME=BOO
    :: CALL GetNiceTime.cmd 

    :: ECHO NICETIME IS %NICETIME%

    :: echo nice time is %NICETIME%
    :: END USAGE  ==================================================================

    echo set hhmmsss
    :: this is Regional settings dependant so tweak this according your current settings
    for /f "tokens=1-3 delims=:" %%a in ('echo %time%') do set hhmmsss=%%a%%b%%c 
    ::DEBUG ECHO hhmmsss IS %hhmmsss%
    ::DEBUG PAUSE
    echo %yyyymmdd%
        :: this is Regional settings dependant so tweak this according your current settings
    for /f "tokens=1-3 delims=." %%D in ('echo %DATE%') do set  yyyymmdd=%%F%%E%%D
    ::DEBUG ECHO yyyymmdd IS %yyyymmdd%
    ::DEBUG PAUSE


    set NICETIME=%yyyymmdd%_%hhmmsss%
    ::DEBUG echo THE NICETIME IS %NICETIME%

    ::DEBUG PAUSE
8
ответ дан 22 November 2019 в 22:31
поделиться

Вот вариант из alt.msdos.batch.nt, который работает локально независимо.

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

-----------8<------8<------------ snip -- snip ----------8<-------------
    :: Works on any NT/2k machine independent of regional date settings
    @ECHO off
    SETLOCAL ENABLEEXTENSIONS
    if "%date%A" LSS "A" (set toks=1-3) else (set toks=2-4)
    for /f "tokens=2-4 delims=(-)" %%a in ('echo:^|date') do (
      for /f "tokens=%toks% delims=.-/ " %%i in ('date/t') do (
        set '%%a'=%%i
        set '%%b'=%%j
        set '%%c'=%%k))
    if %'yy'% LSS 100 set 'yy'=20%'yy'%
    set Today=%'yy'%-%'mm'%-%'dd'% 
    ENDLOCAL & SET v_year=%'yy'%& SET v_month=%'mm'%& SET v_day=%'dd'%

    ECHO Today is Year: [%V_Year%] Month: [%V_Month%] Day: [%V_Day%]

    :EOF
-----------8<------8<------------ snip -- snip ----------8<-------------

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

Недостатком является беспорядочные имена переменных локали: 'yyy', 'mm' и 'dd'. Но кого это волнует!

43
ответ дан 22 November 2019 в 22:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: