Мне нужно использовать команду date /t и преобразовать формат даты в DD-MM-YYYY_weekday со всеми перечисленными "-" и "_". Я не могу найти ответ на свой вопрос. Не могли бы вы мне помочь?
3 ответа
Я хотел бы отформатировать его как DD-MM-YYYY_weekday
Ниже приведены два решения:
- Пакетный файл
- PowerShell (простое однострочное решение)
Пакетное файловое решение
Во-первых, чего не делать:
Использование
%date%
для предоставления решения, как и в других ответах, зависит от языкового стандарта ОС, региональных и языковых настроек и может предоставлять неверную или отсутствующую информацию.Например, формат короткой даты на моем ПК вообще не выводит день недели.
Правильный способ решения проблемы:
- Использование
wmic
, с другой стороны, работает независимо от локали ОС, языка или выбранного пользователем формата даты (панель управления / региональная).
Следующий пакетный файл использует wmic
для получения даты и (локального) времени, поэтому не страдает недостатком решения, использующего %date%
.
Пакетный файл также вызывает PowerShell для получения дня недели, так как в противном случае он недоступен напрямую.
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
Кредиты:
- Спасибо Дэнни Беккету за этот ответ, предоставивший трюк с PowerShell в будние дни.
Альтернативное решение Powershell.
Простое однострочное решение PowerShell:
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
Пытаться:
echo %date:~7,2%-%date:~4,2%-%date:~10,4%_%date:~0,3%
Источник для манипуляций подсказками