Пакетный сценарий (cmd) с результатом DD-MM-YYYY_weekday формат
Мне нужно использовать команду date /t и преобразовать формат даты в DD-MM-YYYY_weekday со всеми перечисленными "-" и "_". Я не могу найти ответ на свой вопрос. Не могли бы вы мне помочь?
3 ответа
I would like to have it formatted like DD-MM-YYYY_weekday
Ниже приведены два решения:
- Пакетный файл
- PowerShell (a simple one line solution)
The Batch file solution
First, what not to do:
С помощью
%date%
to provide a solution is, as used in the other answers, dependent on the OS Locale, Regional, and Language settings and may provide wrong or missing information.For example, the short date format on my PC does not output the weekday at all.
The right way to solve the problem:
- С помощью
wmic
с другой стороны, работает независимо от локали ОС, языка или выбранного пользователем формата даты (панель управления / региональная).
Следующий пакетный файл использует wmic
to retrieve the date and (local) time, so doesn't suffer the disadvantage of a solution using %date%
,
The batch file also calls PowerShell to retrieve the weekday, as that is not directly available otherwise.
getdate.cmd:
@echo off
setlocal
rem get the date
rem use findstr to strip blank lines from wmic output
for /f "usebackq skip=1 tokens=1-3" %%g in (`wmic Path Win32_LocalTime Get Day^,Month^,Year ^| findstr /r /v "^$"`) do (
set _day=00%%g
set _month=00%%h
set _year=%%i
)
rem pad day and month with leading zeros
set _month=%_month:~-2%
set _day=%_day:~-2%
rem get day of the week
for /f %%k in ('powershell ^(get-date^).DayOfWeek') do (
set _dow=%%k
)
rem output format required is DD-MM-YYYY_weekday
echo %_day%-%_month%-%_year%_%_dow%
endlocal
Пример вывода:
F:\test>getdate
06-06-2016_Monday
Кредиты:
- Thanks to Danny Beckett for this answer which provided the PowerShell weekday trick.
Alternative Powershell solution.
A simple one line PowerShell solution is:
Get-Date -format "yyyy-MM-dd_dddd"
Пример вывода:
PS F:\test> Get-Date -format "yyyy-MM-dd_dddd"
2016-06-06_Monday
Дальнейшее чтение
- Индекс AZ командной строки Windows CMD - Отличный справочник по всем вопросам, связанным с командной строкой Windows.
- for / f - Циклическая команда против результатов другой команды.
- getdate - отображает дату и время независимо от локали ОС, языка или выбранного пользователем формата даты (панель управления / региональная).
- переменные - извлекать часть переменной (подстроку).
- wmic - команда инструментария управления Windows.
Это должно сделать это. Он использует for
приказ разорвать date /t
результаты и использование echo
построить выход. Детали могут быть разработаны в командной строке.
for /f "tokens=1,2,3,4 delims=/ " %a in ('date /t') do echo %b-%c-%d_%a