Форматирование даты и времени в командном файле с помощью Powershell

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

Для этого у меня есть следующий код для установки %datetime% в формате, который я хочу.
Пример: 2017-06-19 05_00_00

for /f %%a in ('powershell -Command "Get-Date -format yyyy-MM-dd\ HH_mm_ss"') do set datetime=%%a

Это не совсем работает. Я на 99% уверен, что это связано с промежутком между датой и временем, который я хочу.

В чем ошибка и как ее можно исправить?

(Обратите внимание, что я не могу зависеть от доступности WMIC, поэтому вызов Powershell, вероятно, является лучшим решением. Несмотря на это, мне интересно узнать, как заставить этот конкретный код работать.)

1 ответ

Решение

Вы можете попробовать с любым из этих

for /f "delims=" %%a in ('
    powershell -Command "Get-Date -format 'yyyy-MM-dd HH_mm_ss'"
') do set "datetime=%%a"

for /f "tokens=*" %%a in ('
    powershell -Command "Get-Date -format 'yyyy-MM-dd HH_mm_ss'"
') do set "datetime=%%a"

for /f "tokens=1,2" %%a in ('
    powershell -Command "Get-Date -format 'yyyy-MM-dd HH_mm_ss'"
') do set "datetime=%%a %%b"

Отличия от исходного кода

  1. Строка формата была заключена в кавычки
  2. for /f Команда токенизирует строки, обрабатываемые с использованием пробелов и табуляций в качестве разделителей, извлекая по умолчанию только первый токен в строке (в вашем случае, дату). Поскольку ваш вывод содержит два разделенных пробелом токена, нам нужно отключить токенайзер (первый пример, очистив список разделителей), запросить все токены в строке (второй пример) или запросить только необходимые токены (третий пример)
Другие вопросы по тегам