Se você pode usar o powershell, por que não fazê-lo com esta simples linha:
powershell -Command [DateTime]::Now.ToString(\"yyyyMMdd_hhmmss\")
É um exemplo que mostra o ano, mês, dia, hora, minuto e segundo reais.
Veja a última parte, é o formato que você quer, então você pode obtê-lo com o formato que você deseja.
Explicação do que faz:
- Com
.ToString(
... )
, formata a saída de [DateTime]::Now
no formato yyyyMMdd_hhmmss
E se você quiser em um arquivo bacth você pode usar o truque de for /f "delims="
, veja um exemplo:
for /f "delims=" %a in ('powershell -Command [DateTime]::Now.ToString(\"yyyyMMdd_hhmmss\"^)') do @echo DateTime is: %a
Se você quiser usá-lo em um arquivo .BAT ou .CMD, você deve dobrar o% como este:
for /f "delims=" %%a in ('powershell -Command [DateTime]::Now.ToString(\"yyyyMMdd_hhmmss\"^)') do @echo DateTime is: %%a
Importar nota: O caractere ^ é ev ev para ver o) como final, mesmo que \ faz isso dentro do powershell, etc. É um meta-caractere que informa ao próximo caractere que não deve ser interpretado.
E se você precisar de datetime dentro de uma variável em um lote, veja isto:
@ECHO OFF
for /f "delims=" %%a in ('powershell -Command [DateTime]::Now.ToString(\"yyyyMMdd_hhmmss\"^)') do @Set MyVariable=%%a
ECHO %MyVariable%
P.D .: Há efeitos colaterais no uso do PowerShell, ele altera o tamanho e a fonte da janela do CMD (e os deixa alterados após a saída), também às vezes leva alguns segundos para executar um comando tão simples.