Как получить день месяца и год из сценария Windows cmd.exe? - PullRequest
33 голосов
/ 13 августа 2010

Как получить текущий день, месяц и год из сценария Windows cmd? Мне нужно получить каждое значение в отдельной переменной.

Ответы [ 13 ]

0 голосов
/ 21 марта 2019

Вы можете использовать простой синтаксис переменной, вот пример:

@echo off
set month=%date:~0,2%
set day=%date:~3,2%
set year=%date:~6,4%
echo The current month is %month%
echo The current day is %day%
echo The current year is %year%
pause >nul

Другой вариант - команда for, снова , вот мой пример:

@echo off
for /f "delims=/ tokens=1-3" %%a in ("%date%") do (
set month=%%a
set day=%%b
set year=%%c
)
echo The current month is %month%
echo The current day is %day%
echo The current year is %year%
pause >nul
0 голосов
/ 17 апреля 2018

Извлечение дня, месяца и года

Функция с наибольшим количеством голосов и принятая функция НЕ работают независимо от локали, поскольку команда DATE также подлежит локализации. Например (принятый): на английском языке у вас YYYY на год, а в Голландии это JJJJ. Так что это не пойдет. Следующий скрипт берет локализацию пользователей из реестра, который не зависит от локали.

@echo off

::: Begin set date
setlocal EnableExtensions EnableDelayedExpansion

:: Determine short date format (independent from localization) from registry
for /f "skip=1 tokens=3-5 delims=- " %%L in ( '2^>nul reg query "HKCU\Control Panel\International" /v "sShortDate"' ) do ( 

    :: Since we can have multiple (short) date formats we only use the first char from the format in a new variable
    set "_L=%%L" && set "_L=!_L:~0,1!" && set "_M=%%M" && set "_M=!_M:~0,1!" && set "_N=%%N" && set "_N=!_N:~0,1!"

    :: Now assign the date values to the new vars
    for /f "tokens=2-4 delims=/-. " %%D in ( "%date%" ) do ( set "!_L!=%%D" && set "!_M!=%%E" && set "!_N!=%%F" )
)


:: Print the values as is
echo.
echo This is the original date string --^> %date%
echo These are the splitted values    --^> Day: %d%, Month:%m%, Year: %y%.
echo.

endlocal

Выписка только за год

Для сценария, который я написал, я хотел только извлечь год (не зависящий от локали), поэтому я нашел этот oneliner, так как не мог найти никакого решения. Он использует переменную «DATE», несколько разделителей и проверяет число больше 31. Это будет текущий год. Недостаточно ресурсов в отличие от некоторых других решений.

@echo off

setlocal EnableExtensions

for /f " tokens=2-4 delims=-./ " %%D in ( "%date%" ) do ( if %%D gtr 31 ( set "_YEAR=%%D" ) else ( if %%E gtr 31 ( set "_YEAR=%%E" ) else ( if %%F gtr 31 ( set "_YEAR=%%F" ) ) ) )

echo And the year is... %_YEAR%.
echo.

endlocal
0 голосов
/ 17 октября 2014
powershell Set-Date -Da (Get-Date -Y 1980 -Mon 11 -Day 17)
...