Temos um trabalho em lote que é executado todos os dias e copia um arquivo para uma pasta de coleta. Também quero fazer uma cópia desse arquivo e colocá-lo em uma pasta de arquivo com o nome do arquivo
yyyy-MM-dd.log
Qual é a maneira mais fácil de fazer isso em um trabalho em lote do Windows?
Basicamente, estou procurando um equivalente a este comando Unix:
cp source.log `date +%F`.log
windows
batch-file
cmd
timestamp
Eoin Campbell
fonte
fonte
Respostas:
Mas é dependente da localidade. Não tenho certeza se
%DATE%
está localizado ou depende do formato especificado para a data abreviada no Windows.Esta é uma maneira independente de localidade para extrair a data atual desta resposta , mas depende de
WMIC
eFOR /F
:fonte
2014-5.-01
(quando seria2014-05-26
). Portanto, tenha muito cuidado ao publicar scripts que contenham isso!%time:~-11,2%-%time:~-8,2%-%time:~-5,2%
Isso funcionou para mim e era uma solução segura para nomes de arquivos (embora gere um formato MM-dd-AAAA):
O primeiro comando pega uma DATA e substitui
/
com-
, pega a HORA e substitui:
com-
, e os combina no formato DATA @ HORA. A segundaset
declaração remove quaisquer espaços, eo terceiroset
substitui,
com.
e acrescenta o.jpg
extensão.O código acima é usado em um pequeno script que extrai imagens de uma câmera IP de segurança para processamento posterior:
fonte
10-12-2014@14-22-59,44.jpg
com uma vírgula antes dos milissegundosset SAVESTAMP=%SAVESTAMP:,=.%.jpg
antes daecho
declaração. Se funcionar, atualizarei a resposta.08.06.2016@15-42-20,33.jpg
no meu laptop alemão e[email protected]
no meu inglês.yyyy-MM-dd
SOMENTE para a localidade francesa (França) , tome cuidado porque
/
aparece na data:Para o nosso problema de arquivo de log, aqui está minha proposta APENAS para a localidade francesa :
fonte
"_0:00"
(o caractere sublinhado é um espaço)Esta é uma solução independente de localidade (copie para um arquivo denominado SetDateTimeComponents.cmd):
Coloquei todos os meus scripts .cmd na mesma pasta (% SCRIPTROOT%); qualquer script que precise de valores de data / hora chamará SetDateTimeComponents.cmd como no exemplo a seguir:
Como mostra o exemplo, você pode chamar SetDateTimeComponents.cmd sempre que precisar atualizar os valores de data / hora. Ocultar o script de análise de tempo em seu próprio arquivo SetDateTimeComponents.cmd é uma boa maneira de ocultar os detalhes feios e, mais importante, evitar erros de digitação.
fonte
prompt $d $t
retorna 30/05/2016 15: 35: 56,93 no meu sistema.Porque a idéia de rasgar
%DATE%
e%TIME%
distante e esmagou-los juntos novamente parece frágil na melhor das hipóteses, aqui está uma alternativa que utiliza um powershell oneliner:A referência para
get-date
está aqui , com opções de formato para os estilos .NET e UNIX.fonte
Eu freqüentemente uso isso e coloco tudo em um único comando de cópia. O seguinte copia example.txt como example_YYYYMMDD_HHMMSS.txt e, claro, você pode modificá-lo para se adequar ao seu formato preferido. As aspas são necessárias apenas se houver espaços na especificação do arquivo. Se você quiser reutilizar exatamente a mesma data / carimbo de data / hora, precisará armazená-lo em uma variável.
fonte
Isso garantirá que a saída seja um valor de 2 dígitos ... você pode reorganizar a saída de acordo com sua preferência e testar removendo os comentários da seção de diagnóstico. Aproveitar!
(Eu peguei emprestado muito disso de outros fóruns ...)
fonte
Crie um arquivo com a data atual como nome de arquivo (ex. 2008-11-08.dat)
Com a data atual, mas sem o "-" (ex. 20081108.dat)
fonte
Talvez isso possa ajudar:
ou
fonte
Eu montei um pequeno programa C para imprimir o carimbo de data / hora atual (locale-seguro, sem caracteres inválidos ...). Então, eu uso o comando FOR para salvar o resultado em uma variável de ambiente:
Aqui está um link:
https://github.com/HarryPehkonen/dos-timestamp
fonte
Eu sei que este tópico é antigo, mas eu só quero adicionar isso aqui porque me ajudou muito tentando descobrir tudo isso e está limpo. O bom disso é que você pode colocá-lo em um loop para um arquivo em lote que está sempre em execução. Log de tempo de atividade do servidor ou algo assim. É para isso que eu uso de qualquer maneira. Espero que isso ajude alguém algum dia.
fonte
ERROR : Invalid Parameter #12 : "/LOG:C:\opt\Sync_08.10.2020_16:27:39.log"
Como uma correção, usei traços em vez disso:set FreshTime=%hour%-%min%-%secs%
Você pode simplesmente detectar o formato local atual e obter a data em seu formato, por exemplo:
fonte
Eu sei que este é um post antigo, mas há uma resposta MUITO mais simples (embora talvez só funcione em versões mais recentes do Windows). Basta usar o parâmetro / t para os comandos DATE e TIME dos para mostrar apenas a data ou hora e não solicitar que você as defina, como este:
fonte
1) Você pode baixar GNU coreutils que vem com a data GNU
2) você pode usar o VBScript , o que torna a manipulação de datas mais fácil no Windows:
Execute o script como:
fonte
Isso funciona bem com (meu) idioma alemão, deve ser possível ajustá-lo às suas necessidades ...
fonte
%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%
funciona para a localização portuguesa também! Quero dizer AAAAMMDDPara grandes arquivos zip para implantação, eu uso um quarto de hora. Ninguém mais nesta página mencionou isso antes, então vou colocar meu pequeno script aqui:
Ele não zera um quarto de hora da meia-noite às 5 da manhã ainda, mas ainda permite que você tenha uma versão carimbada várias vezes ao dia com poucas colisões.
Espero que ajude.
fonte
usou a sugestão de Martin com um pequeno ajuste para adicionar carimbo de data / hora ao nome do arquivo:
Para 10:17:21 23/10/2019 O resultado é:
fonte