Atualização: agora que é 2016, eu usaria o PowerShell para isso, a menos que haja um motivo realmente compatível com versões anteriores, principalmente por causa do problema de configurações regionais no uso date
. Consulte https://stackoverflow.com/a/19799236/8479 do @ npocmaka
O que é uma instrução de linha de comando do Windows que posso usar para obter a data e hora atuais em um formato que eu possa colocar em um nome de arquivo?
Quero ter um arquivo .bat que feche um diretório em um arquivo morto com a data e hora atuais como parte do nome, por exemplo Code_2008-10-14_2257.zip
,. Existe alguma maneira fácil de fazer isso, independentemente das configurações regionais da máquina?
Eu realmente não me importo com o formato da data, idealmente seria aaaa-mm-dd, mas qualquer coisa simples está bem.
Até agora eu tenho isso, o que na minha máquina me dá Tue_10_14_2008_230050_91
:
rem Get the datetime in a format that can go in a filename.
set _my_datetime=%date%_%time%
set _my_datetime=%_my_datetime: =_%
set _my_datetime=%_my_datetime::=%
set _my_datetime=%_my_datetime:/=_%
set _my_datetime=%_my_datetime:.=_%
rem Now use the timestamp by in a new ZIP file name.
"d:\Program Files\7-Zip\7z.exe" a -r Code_%_my_datetime%.zip Code
Eu posso viver com isso, mas parece um pouco desajeitado. Idealmente, seria mais breve e teria o formato mencionado anteriormente.
Estou usando o Windows Server 2003 e o Windows XP Professional. Não quero instalar utilitários adicionais para conseguir isso (embora eu saiba que existem alguns que farão uma boa formatação de data).
[datetime]::now.tostring("yyyy-MM-dd")
Respostas:
Consulte Arquivo em lote do Windows (.bat) para obter a data atual no formato MMDDYYYY :
Se você preferir o horário no formato militar de 24 horas, poderá substituir a segunda linha FOR por esta:
Se você deseja a data independentemente da ordem do dia / mês da região, pode usar "WMIC os GET LocalDateTime" como fonte, pois está na ordem ISO:
fonte
For /f "tokens=1-3 delims=/ " %%a in ('date /t') do (set mydate=%%c-%%b-%%a)
da segunda linha.For /f "tokens=1-2 delims=/: " %%a in ("%TIME%") do (if %%a LSS 10 (set mytime=0%%a%%b) else (set mytime=%%a%%b))
Isso retorna valores como "0001" e "0315", que eu prefiro nos meus nomes de arquivos.wmic
comando! Até agora eu só viWMIC Path Win32_LocalTime Get Day,Hour,Minute,Month,Second,Year /Format:table
. Da mesma forma, para entrar20120623-1619
no meu fuso horário local de Amsterdã, em uma linha:for /f %%a in ('wmic os get LocalDateTime ^| findstr ^[0-9]') do (set ts=%%a) & set datetime=%ts:~0,8%-%ts:~8,4%
%%a was unexpected at this time.
Análise de data e hora regionalmente independente
O formato de saída
%DATE%
e dodir
comando é regionalmente dependente e, portanto, nem robusto nem inteligente. date.exe (parte do UnxUtils ) fornece qualquer informação de data e hora em qualquer formato possível. Você também pode extrair as informações de data / hora de qualquer arquivo comdate.exe
.Exemplos: (em um script cmd, use %% em vez de%)
date.exe +"%Y-%m-%d"
22-12-2009
date.exe +"%T"
18:55:03
date.exe +"%Y%m%d %H%M%S: Any text"
20091222 185503: Qualquer texto
date.exe +"Text: %y/%m/%d-any text-%H.%M"
Texto: 12/12/22-qualquer texto-18,55
Command: date.exe +"%m-%d """%H %M %S """"
07-22 "18:55:03" `
As informações de data / hora de um arquivo de referência:
date.exe -r c:\file.txt +"The timestamp of file.txt is: %Y-%m-%d %H:%M:%S"
Utilizando-o em um script CMD para obter informações sobre ano, mês, dia e hora:
Utilizando-o em um script CMD para obter um registro de data e hora em qualquer formato necessário:
Extraindo as informações de data / hora de qualquer arquivo de referência.
Adicionando a um arquivo suas informações de data / hora:
date.exe faz parte das ferramentas GNU gratuitas que não precisam de instalação.
NOTA: Copiar
date.exe
para qualquer diretório que esteja no caminho de pesquisa pode causar a falha de outros scripts que usam odate
comando interno do Windows .fonte
date.exe
parece depender da localidade. Ele retorna a data em dd / MM / aaaa no meu sistema, se fosse independente da localidade, esperaria MM / dd / aaaa ou aaaa-MM-dd. Eu não acho que esta resposta esteja falando sobre o date.exe embutido, mas sobre alguma versão de terceiros.Mais duas maneiras que não dependem das configurações de hora (ambas tiradas de : Como obter dados / hora independentes da localização:) . E ambos também recebem o dia da semana e nenhum deles requer permissões de administrador !:
MAKECAB - funcionará em TODOS os sistemas Windows (rápido, mas cria um pequeno arquivo temporário) (o script foxidrive):
Mais informações sobre a função get-date .
ROBOCOPIA - não é um comando nativo para Windows XP e Windows Server 2003, mas pode ser baixado do site da microsoft . Mas está embutido em tudo, desde o Windows Vista e superior:
E mais três maneiras que usam outras linguagens de script do Windows. Eles oferecem mais flexibilidade, por exemplo, você pode obter a semana do ano, o tempo em milissegundos e assim por diante.
JScript / lote híbrido (precisa ser salvo como
.bat
). O JScript está disponível em todos os sistemas NT e acima, como parte do Windows Script Host ( embora possa ser desativado pelo registro, é um caso raro ):Híbrido VSCRIPT / BATCH ( É possível incorporar e executar o VBScript em um arquivo em lotes sem usar um arquivo temporário? ) No mesmo caso do JScript, mas a hibridação não é tão perfeita:
PowerShell - pode ser instalado em todas as máquinas com .NET - faça o download da Microsoft ( v1 , v2 , v3 (apenas para Windows 7 e superior)). Ele é instalado por padrão em tudo, desde o Windows 7 / Windows Server 2008 e superior:
Para usá-lo em um arquivo em lotes:
Auto-compilado jscript.net/batch (nunca vi uma máquina Windows sem .NET, então acho que é bastante portátil):
Logman Não é possível obter o ano e o dia da semana. É relativamente lento e também cria um arquivo temporário e baseia-se nos carimbos de hora que o logman coloca em seus arquivos de log. Ele funcionará em tudo, desde o Windows XP e superior. Provavelmente nunca será usado por ninguém - inclusive eu -, mas é mais uma maneira ...
Mais uma maneira com o WMIC, que também fornece a semana do ano e o dia da semana, mas não os milissegundos (por milissegundos, verifique a resposta do foxidrive):
Usando o TYPEPERF com alguns esforços para ser rápido e compatível com diferentes configurações de idioma e o mais rápido possível:
O MSHTA permite chamar métodos JavaScript semelhantes ao método JScript demonstrado no item 3 acima. Lembre-se de que as propriedades do objeto Date do JavaScript que envolvem valores de mês são numeradas de 0 a 11, não de 1 a 12. Portanto, um valor de 9 significa outubro.
fonte
makecab
: isso funciona criando um arquivo chamado~.rpt
e pesquisando umstring
dentro dele, começando commakecab
, que é uma linha parecidaMakeCAB Report: Tue Sep 02 22:15:57 2014
. para mim, esse comando não é localizado, é independente do local. Esse truque é confiar nisso. Vamos torcer para que nunca mais seja, ou então cuidado!mshta
híbrido? :) Se importa se eu editar sua resposta e adicionar uma? Essa parece ser a melhor coleção de soluções esotéricas, e parecemshta
pertencer aqui.Aqui está uma variante do alt.msdos.batch.nt que funciona localmente independentemente.
Coloque isso em um arquivo de texto, por exemplo, getDate.cmd
Para que o código funcione sem as mensagens de erro no stderr, tive que adicionar aspas simples e incluir as atribuições de variável para %% a, %% be %% c. Meu código de idioma (PT) estava causando erros em um estágio do loop / análise em que coisas como "set = 20" estavam sendo executadas. As aspas produzem um token (embora vazio) para o lado esquerdo da instrução de atribuição.
A desvantagem são os nomes de variáveis de localidade confusos: 'yy', 'mm' e 'dd'. Mas ei, quem se importa!
fonte
dd
,mm
eyy
na saídaecho:^|date
.date
dáGeben Sie das neue Datum ein: (TT-MM-JJ)
, onde aJJ
quebra seu script (esperaYY
))Eu uso isso (novamente não independente da região (Reino Unido))
fonte
As primeiras quatro linhas desse código fornecerão variáveis confiáveis e mínimas AAA DD MM AAAA HH Min Sec no Windows XP Professional e superior.
fonte
Infelizmente, isso não é imune às configurações regionais, mas faz o que você deseja.
Incrível o que você pode encontrar na Wikipedia .
fonte
Use o seguinte script para obter o dia atual na linha de comando:
fonte
Outra maneira ( crédito ):
Observe que ambas as minhas respostas aqui ainda dependem da ordem do dia e do mês, conforme determinado pelas configurações regionais - não tenho certeza de como contornar isso.
fonte
fonte
http://www.dotnetperls.com/7-zip-examples
alguns pontos positivos podem ser úteis para alguém no futuro.Isso não é realmente mais breve, mas pode ser uma maneira mais flexível ( crédito ):
fonte
Aqui está uma maneira de obter data e hora em uma única linha:
Nos EUA, isso produzirá "aaaa-mm-dd hhmm". Diferentes configurações regionais resultarão em diferentes% date% saídas, mas você pode modificar a ordem do token.
Se você deseja um formato diferente, modifique a instrução echo reorganizando os tokens ou usando separadores diferentes (ou não).
fonte
Basta usar esta linha:
fonte
Resposta curta :
Resposta longa
fonte
A solução de uma linha de Matthew Johnson para obter a data e a hora de uma linha é eloquente e útil.
No entanto, ele precisa de uma modificação simples para trabalhar em um arquivo em lotes:
fonte
echo %date:/=-%%time::=-%
E aqui está um arquivo em lote semelhante para a parte do tempo.
--jeroen
fonte
z: & forfiles /m *.jpg /s /d 07/16/2015 /c “cmd /c echo @fdate @ftime @path”
mas quero saber como carregar arquivos de acordo com a data de criação. Qualquer ajuda será muito apreciada. Uma pergunta foi feita no stackoverflow, mas ainda não há resposta. Por favor, dê uma olhada no link para obter os detalhes stackoverflow.com/q/32293517/3327081forfiles
.Eu mudei a resposta com o arquivo de lote de VMAX para que ele funciona com a língua holandesa também.
Os holandeses - persistente como nós somos - tem algumas mudanças no
%date%
,date/t
edate
que quebra o lote-arquivo original.Seria bom se algumas pessoas também pudessem verificar isso em outros locais do Windows e reportar os resultados.
Se o arquivo em lote falhar no seu local, inclua a saída dessas duas instruções no prompt de comando:
echo:^|date
date/t
Esta é uma amostra da saída que você deve obter do arquivo em lote:
Aqui está o código revisado com comentários sobre o porquê:
--jeroen
fonte
jj-mm-aaaa
para jour, mois, annee? Italianos talvezgg/mm/aaaa
para giorno, mese, anno? Alemãestt.mm.jjjj
para Tag, Monat, Jahr? Mas então: acho que na maioria dos países apenas algumas línguas são usadas. Como na Holanda, de fato, o Windows geralmente é inglês ou holandês, e não muito mais. Bom o suficiente para mim.jj
e não impõe um ano de 4 dígitos), mas usashift
para descartar o dia comoMon
ouma
. Apenas diferente.(TT-MM-JJ)
, adate/t
saída é23.06.2012
. / cc @Arjanreg query "HKCU\Control Panel\International" /vShortDate
. Cuidado durante o teste: para um prompt de comando aberto, alterar essa configuração do Painel de Controle também altera o formato usado para exibir a data (paradate
edate /t
eecho %date%
), mas no Windows 7 NÃO altera o formato para a nova data! Como mudar o meu formato de data abreviada emYY/MM/dd
, fica me:The current date is: 12/06/23 Enter the new date: (mm-dd-yy)
. A abertura de um novo prompt de comando corrige isso.reg query "HKCU\Control Panel\International" /v sShortDate
.Isto é o que eu usei:
Se você quiser mais idéias para automatizar backups em arquivos 7-Zip, eu tenho um projeto aberto / gratuito que você pode usar ou revisar para obter idéias: http://wittman.org/ziparcy/
fonte
Eu tive um problema parecido. Tenho um download diário automático de um arquivo criptografado de um servidor FTP. Eu queria descriptografar o arquivo usando gpg, renomear o arquivo para a data atual (formato AAAAMMDD) e soltar o arquivo descriptografado em uma pasta para o departamento correto.
Passei por várias sugestões para renomear o arquivo de acordo com a data e não tive sorte até encontrar essa solução simples.
Funcionou perfeitamente (ou seja, o nome do arquivo sai como "2011-06-14.txt").
(Fonte)
fonte
Uma função baseada em
wmic
:Cabeça: Independente da região. Desvantagem: Apenas administradores de sistema podem executar o wmic.exe.
Uso:
Isso ecoa uma string como esta:
Observe que os parâmetros de função são out-Parameters - ou seja, você deve fornecer nomes de variáveis em vez de valores.
Todos os parâmetros são opcionais, portanto,
call:Now Y M
é uma chamada válida se você deseja obter apenas ano e mês.fonte
http://sourceforge.net/projects/unxutils/files/
Procure dentro do arquivo ZIP algo chamado "Date.exe" e renomeie-o "DateFormat.exe" (para evitar conflitos).
Coloque-o na pasta system32 do Windows.
Tem muitas opções de "saída de data".
Para obter ajuda, use
DateFormat.exe --h
Não sei como você colocaria sua saída em uma variável de ambiente ... usando SET.
fonte
Solução independente regional que gera o formato de data ISO:
O que ainda pode ser otimizado: Outros processos podem ficar confusos se você usar o formato da data no curto período de tempo enquanto ele é modificado. Portanto, analisar a saída de acordo com a string de formato existente pode ser 'mais seguro' - mas será mais complicado
fonte
fonte
Dada uma localidade conhecida, para referência em forma funcional. A
ECHOTIMESTAMP
chamada mostra como obter o registro de data e hora em uma variável (DTS
neste exemplo).E salvo em arquivo, timestamp.bat, aqui está a saída:
fonte
(yy)yy年m月d日 hh:mm
- sem zeros à esquerda. (aa) pode ser ignorado, pois temos um ano com 2 ou 4 dígitos. Mas observe uma coisa: o formato da data e hora pode ser alterado por máquina.systeminfo
na CLI e deixe-me saber o que você vêSystem Locale
. O programa leva tempo para ser executado, mas talvez o resultado da localidade possa ser armazenado em cache e subsequentemente usado para indexar um formato de carimbo de data / hora.Com o Windows 7, esse código funciona para mim:
fonte
independent of the regional settings of the machine
Observo que o o / p fez não pediu uma solução independente da região. Minha solução é para o Reino Unido.
Esta é a solução mais simples possível, uma solução de 1 linha, para uso em um arquivo em lotes:
fonte
...particularly because of the regional settings issue with using date
. Btw. Sua solução é igual às vinte outras respostas.echo %date:/=-%
Eu sei que existem inúmeras maneiras já mencionadas. Mas aqui está a minha maneira de decompô-lo para entender como isso é feito. Felizmente, é útil para quem gosta de método passo a passo.
fonte
independent of the regional settings of the machine