Em um script em lote do Windows (Windows XP), preciso formatar a data e a hora atuais para uso posterior em nomes de arquivos etc.
É semelhante à pergunta Stack Overflow Como acrescentar uma data em arquivos em lotes , mas com o tempo também.
Eu tenho isso até agora:
echo %DATE%
echo %TIME%
set datetimef=%date:~-4%_%date:~3,2%_%date:~0,2%__%time:~0,2%_%time:~3,2%_%time:~6,2%
echo %datetimef%
que dá:
28/07/2009
8:35:31.01
2009_07_28__ 8_36_01
Existe uma maneira de permitir uma hora de um dígito em% TIME%, para que eu possa obter o seguinte?
2009_07_28__08_36_01
windows
datetime
formatting
batch-file
Laurie
fonte
fonte
datetimef
variável e colocar 0s. No seu exemplo:SET datetimef=%datetimef: =0%
Respostas:
Acabei com este script:
:: No WIN2008R2, por exemplo, eu precisava fazer o seu 'mês definido =% data: ~ 3,2%' como abaixo :: caso contrário, 00 aparece por MÊS
fonte
fonte
Aqui está como eu gero um nome de arquivo de log (com base em http://ss64.com/nt/syntax-getdate.html ):
fonte
Geralmente faço dessa maneira sempre que preciso de uma string de data / hora:
É para o formato de data / hora em alemão (dd.mm.aaaa hh: mm: ss). Basicamente concatenar as substrings e finalmente substituir todos os espaços por zeros.
Breve explicação de como as substrings funcionam:
Portanto, para obter apenas o ano de uma data como "29.03.2018", use:
fonte
Se o PowerShell estiver instalado, você poderá obter a Data / Hora de maneira fácil e confiável, em qualquer formato que desejar, por exemplo:
É claro que hoje em dia o PowerShell está sempre instalado, mas no Windows XP você provavelmente só desejará usar essa técnica se o script em lote estiver sendo usado em um ambiente conhecido onde você sabe que o PS está disponível (ou verifique o arquivo em lotes se o PowerShell estiver disponível ...)
Você pode perguntar: por que usar um arquivo em lotes, se é possível usar o PowerShell para obter a data / hora, mas acho que algumas razões óbvias são: (a) você não conhece muito o PowerShell e ainda prefere coisas à moda antiga com arquivos em lote ou (b) você está atualizando um script antigo e não deseja portar tudo para o PS.
fonte
Encontrei este problema hoje e o resolvi com:
Ele substitui os espaços por 0s e basicamente zero-pads a hora.
Após uma pesquisa rápida, não descobri se eram necessárias extensões de comando (ainda funcionavam com SETLOCAL DISABLEEXTENSIONS).
fonte
:
)?echo %TIME: =:%
mas não se isso é talvez tentar escapar da:
com um^
comoecho %TIME: =^:%
(que também funciona para mim).Como foi observado, analisar a data e a hora é útil apenas se você souber o formato que está sendo usado pelo usuário atual (por exemplo, MM / dd / aa ou dd-MM-aaaa apenas para citar dois). Isso pode ser determinado, mas, quando você fizer todo o estresse e a análise, ainda terá uma situação em que há um formato inesperado usado, e mais ajustes serão necessários.
Você também pode usar algum programa externo que retornará uma lesma de data em seu formato preferido, mas que possui desvantagens de precisar distribuir o programa utilitário com seu script / lote.
Também existem truques em lote usando o relógio CMOS de uma maneira bastante simples, mas isso é muito próximo dos fios desencapados para a maioria das pessoas e nem sempre é o local preferido para recuperar a data / hora.
Abaixo está uma solução que evita os problemas acima. Sim, ele apresenta alguns outros problemas, mas, para os meus propósitos, achei a solução mais fácil, clara e portátil para criar um registro de data e hora em arquivos .bat para sistemas Windows modernos. Este é apenas um exemplo, mas acho que você verá como modificar para outros formatos de data e / ou hora, etc.
fonte
reg query "HKCU\Control Panel\International" /v sShortDate
peça sem alterar a configuração do registro (exercício deixado para o leitor!).O seguinte pode não ser uma resposta direta, mas uma resposta próxima?
Pelo menos pode ser inspirador.
fonte
Se você não precisa exatamente deste formato:
Em seguida, você pode usar as três linhas de código a seguir que usam% date% e% time%:
Nota: Os caracteres
/
e:
são removidos e o caráter.
e espaço é substituído por um sublinhado.Exemplo de saída (quarta-feira, 5/5/15 às 12:49 PM, com 50 segundos e 93 milissegundos):
fonte
fonte
A
offset:length
formatação suportada com oSET
comando no Windows não permitirá que você preencha o0
que parece estar interessado.No entanto, você pode codificar um script BATCH para verificar se a hora é menor que
10
epreenchida de acordo com uma
echo
sequência diferente .Você encontrará algumas informações sobre o
SET
comando neste link .Você também pode mudar para outros métodos de programação para chegar aqui.
É bastante simples no unix bash (disponível com Cygwin no Windows) dizer apenas,
E, sempre funciona corretamente.
fonte
Eu fiz assim:
fonte
A primeira linha sempre gera neste formato relação ao fuso horário:
20150515150941.077000 + 120
Isso deixa você apenas formatando a saída para atender aos seus desejos.
fonte
Esse arquivo bat (salvo como datetimestr.bat) produz a sequência de data / hora 3 vezes: (1) sequência de data / hora longa com dia da semana e segundos, (2) sequência de data / hora curta sem eles e (3) versão curta do código.
Para dar o devido crédito, mesclei os conceitos de Peter Mortensen (18 de junho de 14 às 21:02) e opello (25 de agosto de 11 às 14:27).
Você pode escrever isso muito mais curto, mas esta versão longa facilita a leitura e a compreensão do código.
fonte
Eu sou realmente novo em arquivos em lote e esse é o meu código !! (Não sei por que, mas não consegui combinar data / t e hora / t e não pude usar % date% e % time% diretamente sem uma variável ...)
É meio reutilizado por outras pessoas (a questão era obter uma data e hora formatada para usar como nome de arquivo).
fonte
Há outra maneira fácil de fazer isso:
fonte
Para gerar um
YYYY-MM-DD hh:mm:ss
carimbo de data / hora (24 horas), eu uso:fonte
%TIME%
e%DATE%
usam o mesmo formato que os comandosTIME
eDATE
, respectivamente. No meu sistema, as variáveis não correspondem às minhas configurações regionais.Esse script em lote fará exatamente o que o OP deseja (testado no Windows XP SP3).
Eu também usei esse truque de registro inteligente descrito anteriormente por "jph", que IMHO é a maneira mais simples de obter uma formatação 100% consistente da data para
"yyyy_MM_dd"
em qualquer sistema Windows novo ou antigo. A alteração em um valor do Registro para fazer isso é temporária e trivial instantânea; dura apenas alguns milissegundos antes de ser revertido imediatamente.Clique duas vezes nesse arquivo em lotes para obter uma demonstração instantânea. A janela do prompt de comando será exibida e exibirá o carimbo de data e hora. . . . .
fonte
fonte
Crie um arquivo chamado "search_files.bat" e coloque o conteúdo abaixo no arquivo. Em seguida, clique duas vezes nele. A variável temporária% THH% foi criada para lidar com a AM adequadamente. Se houver um 0 nos 2 primeiros dígitos do tempo, o Windows ignorará o restante do nome do arquivo LOG.
fonte
Gosto da versão curta em cima do @The lorax, mas para outras configurações de idioma pode ser um pouco diferente.
Por exemplo, nas configurações do idioma alemão (com formato de data natural: dd.mm.aaaa), a consulta do mês deve ser alterada de 4,2 para 3,2:
fonte
Este é o meu 2 centavos por um
datetime string
. NosMM DD YYYY
sistemas, alterne as primeira e segunda%DATE:~
entradas.fonte
Eu tentei a resposta aceita e funciona muito bem. Infelizmente, o formato de horário dos EUA parece ser H: MM: SS.CS e o 0 ausente na frente estava causando problemas de análise antes das 10h. Para superar esse obstáculo e também permitir a análise da maioria dos formatos de hora mundial, criei essa rotina simples que parece funcionar muito bem.
O bom dessa rotina é que você transmita a sequência de horas como o primeiro parâmetro e o nome da variável de ambiente que deseja conter a hora (em centisegundos) como o segundo parâmetro. Por exemplo:
(* Chris *)
fonte
Talvez algo assim:
fonte
Em situações como essa, use uma abordagem de programação simples e padrão: em vez de gastar um grande esforço na análise de uma entidade desconhecida, salve a configuração atual, redefina-a para um estado conhecido, extraia as informações e restaure o estado original. Use apenas recursos padrão do Windows.
Especificamente, os formatos de data e hora são armazenados na chave do Registro HKCU \ Painel de Controle \ Internacional \ em [valores de definição da MS] ":" "sTimeFormat" e "sShortDate". Reg é o editor de registro do console incluído em todas as versões do Windows. Privilégios elevados não são necessários para modificar a chave HKCU
Simples, direto e deve funcionar para todas as regiões.
Por razões que não entendo, a redefinição do valor "sShortDate" entra em vigor imediatamente em uma janela do console, mas a redefinição do valor "sTimeFormat" muito semelhante NÃO entra em vigor até que uma nova janela do console seja aberta. No entanto, a única coisa que pode ser alterada é o delimitador - as posições dos dígitos são fixas. Da mesma forma, o token de tempo "HH" deve preceder zeros à esquerda, mas não o faz. Felizmente, as soluções alternativas são fáceis.
fonte
sTimeFormat
formato da hora é inútil . Não. Como isso afeta posterior prompt do console, aplicá-lo usandofor /f "delims=" %%G in ('cmd /C echo SET "DateTime=%%date%%__%%time%%"') do %%G
Esse script usa uma interface WMI acessada principal via ferramenta WMIC, que é parte integrante do Windows desde o Windows XP Professional (a edição Home também é suportada, mas a ferramenta não é instalada por padrão). O script também implementa uma solução alternativa da ferramenta WMIC ausente, criando e chamando um vbscript WSH para acessar uma interface WMI e gravando na saída do console na hora com o mesmo formato que a ferramenta WMIC fornece.
fonte
Um bom truque de linha única para evitar a expansão variável antecipada é usar
cmd /c echo ^%time^%
fonte
fonte
Para uma solução muito simples para data numérica para uso em nomes de arquivos, use o seguinte código:
fonte
Divida os resultados do comando date por barra e, em seguida, você pode mover cada um dos tokens para as variáveis apropriadas.
fonte