Me deparei com um bug no meu script DOS que usa dados de data e hora para nomear arquivos. O problema foi que eu acabei com uma lacuna porque a variável time não forneceu automaticamente zero inicial por hora <10. Portanto, executar> echo% time% retorna: '9: 29: 17,88'.
Alguém sabe uma maneira de preencher condicionalmente zeros à esquerda para corrigir isso?
Mais informações: Meu comando set filename é:
set logfile=C:\Temp\robolog_%date:~-4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.log
que acaba sendo: C: \ Temp \ robolog_20100602_ 93208.log (para 9:23 da manhã).
Esta questão está relacionada a esta .
obrigado
Respostas:
Uma maneira muito simples é simplesmente substituir o espaço inicial por zero:
echo %TIME: =0%
outputs:
09:18:53,45
fonte
set HH=%time:~-11,2% set MM=%time:~-8,2% set SS=%time:~-5,2% set ISOTIME=%HH: =0%-%MM%-%SS% echo %ISOTIME%
Veja também ss64.com/nt/syntax-replace.htmlset timestring=%TIME: =0%
no início da sub-chamada - então apenas trabalhe comtimestring
(ou qualquer variável que você use).Minha solução foi usar a seguinte ideia:
fonte
but gives syntax error on server 2003
- por que você se importa com isso em 2016?Idéia semelhante à resposta de Dennis . O problema é que a largura de
%time%
é sempre a mesma, portanto, ele insere um espaço no início, em vez de retornar uma string mais curta.Você pode se livrar disso com
for
:O resto é mais ou menos o mesmo, então.
fonte
Usando a contribuição de Jesse, acabei de criar uma variável com a saída modificada. Então eu faço referência a essa variável para criar a parte da hora.
Com a fonte original:
Obrigado Jesse. Eu teria votado se tivesse os pontos de reputação.
fonte
Para a solução mais compacta implementando tudo acima, acho que
funcionaria aqui sem adicionar novas linhas ao script. Talvez seja menos elegante que várias soluções de comando ..
fonte
A seguir, são necessárias mais algumas linhas, mas é claro e compreensível. Ele salva stdout e stderr para separar arquivos, cada um com um carimbo de data / hora. O registro de data e hora inclui ano, mês, dia, hora, minuto e segundo, nessa ordem. Os carimbos de data / hora devem sempre ter o componente de data mais significativo primeiro (ano) e o menor componente (segundos) por último. Isso permite que as listagens de arquivos estejam na ordem do tempo. Sem mais delongas, aqui está a minha solução.
fonte
Isso marca um zero no início do tempo e leva os últimos dois dígitos da hora (as posições de minuto e segundo iniciais são alteradas em um). Então, as 3 da manhã se tornam "03", depois "03" e a hora 15 se torna "015" e "15".
Menos legível:
fonte
Uma linha de código fará o que você precisa:
Por exemplo, eu uso% Date% e adiciono um zero inicial a uma variável que utilizo para determinar se preciso substituir o espaço inicial por um zero para% Time%.
fonte
Isso cria um carimbo de data / hora classificável e a segunda linha garante que não haja espaços para a hora de um dígito, etc., para torná-lo utilizável para scripts:
Saída:
fonte
Obrigado por ajudar de cima ... É isso que estou usando:
Em seguida, tenho logs chamados em trabalhos de Robocopy como este:
Existem muitos como este:
Termina o trabalho com isso:
COMPLETE_LOG_2018-06-27_10_53_54.log
é o arquivo produzido no final e pode ser classificado por nome de arquivo.fonte
A resposta de Jesse resolveu meu problema de renomeação de arquivos, eliminando o espaço no campo hora. É assim que eu defino minhas variáveis:
Funciona como um campeão; por algum motivo, a data não precisou do mesmo tratamento, mas imagino que isso se deva às configurações regionais.
fonte
fonte
fonte