As variáveis de ambiente %DATE%
e %TIME%
fornecem a data e hora atuais nas máquinas Windows na linha de comando e dentro de um arquivo em lotes.
Infelizmente, esses valores são compatíveis com a localidade! Significando que, digamos, em uma máquina alemã, você obterá
26.1.2011
ao invés de
2011-26-01
isso estraga a classificação se você deseja usar essa variável em um nome de arquivo.
Existe alguma maneira fácil de se apossar de uma YYYY-MM-DD
sequência de datas que não reconhece o código de idioma em um arquivo em lotes do Windows?
No momento, estou trabalhando com essa solução alternativa:
for /f "tokens=1,2,3,4 delims=. " %%i in ('date /t') do set date=%%k-%%j-%%i
echo %date%
mas agora isso é específico da localidade alemã - obviamente, uma solução completamente independente seria muito melhor.
O sistema operacional em questão é o Server 2008. Eu preferiria não usar uma ferramenta de terceiros, se possível.
for /f %%x in ('wmic os get localdatetime ^| findstr /b [0-9]') do @set X=%%x
é um pouco melhor. Há também uma versão mais compacta disponível aqui , nomeadamente nesse comentário .findstr
solução é muito melhor, como no meu caso, o originalfor
(sem oskip
) itera 3 vezes. Uma vez para a palavra"LocalDateTime"
, uma segunda vez para a data real e uma terceira vez para um valor vazio (talvez uma quebra de linha?).Aqui está uma linha dupla que eu estou usando, que parece funcionar independentemente da versão do Windows ou das configurações de horário local:
Isso definirá uma variável chamada% CUR_DATE% no seguinte formato padrão ISO:
Tentei torná-lo uma linha com o &&, mas não parecia necessário, então recorri à versão em duas linhas. Espero que isto ajude.
fonte
Eu uso esse truque para obter o UTC ..
No entanto, ele tem o efeito colateral de alterar brevemente todo o sistema para UTC. Provavelmente, isso é bom em uma estação de trabalho pessoal, mas não tenho certeza de qual seria o impacto em um grande servidor de produção, que provavelmente deveria estar definido como UTC de qualquer maneira.
fonte