Acesso à hora atual no script de lote do windows

1

Eu preciso acessar o horário atual a partir de um script em lote. Ao digitar tempo no cmd, eu recebo algo assim:

The current time is: 16:58:03.98
Enter the new time:

O que eu preciso não é isso, mas a hora, os minutos e os segundos em baldes separados que eu posso processar de qualquer maneira arbitrária. Em outras palavras, estou procurando uma função que retorne o valor da hora para que eu possa atribuí-la a uma variável, assim:

var hour = GetCurrentHour()

Obrigado!

    
por raoulsson 28.08.2009 / 17:03

6 respostas

4
FOR /F "TOKENS=1 DELIMS=:" %%A IN ('TIME/T') DO SET HH=%%A
FOR /F "TOKENS=2 DELIMS=:" %%A IN ('TIME/T') DO SET MM=%%A

agora você tem duas variáveis% HH% para horas e% MM% para minutos. Espero que isso tenha ajudado.

    
por 28.08.2009 / 17:14
4

A hora e a data são definidas em duas variáveis do sistema:% time% & % date%

(Cuidado, o formato depende das configurações regionais e de idioma)

C:>echo %time%

17:16:13,39

C:>echo %date%

28/08/2009

C:>

    
por 28.08.2009 / 17:18
2

Combinar todas essas postagens produz uma resposta para a pergunta original:

for /f "tokens=1-3 delims=:." %%A in ("%time%") do (

set HH=%%A

set MM=%%B

set SS=%%C)

Carregará seus depósitos HH MM e SS com os respectivos valores. Você pode, obviamente, digitar os nomes de variáveis que quiser no lugar deles. (Bloqueio de nomes reservados.) Você também pode deixar de fora o "." na seção delims, se você quiser que segundos fracionários sejam armazenados no último valor. (% time% contém HH: MM: SS.ss)

    
por 24.12.2011 / 02:29
1

O que você tem a fazer é basicamente usar a variável% time% e especificar para contar um certo número de caracteres na string para extrair a parte que você deseja. Digitar "echo% time%" em um prompt cmd retorna algo assim:

11: 11: 38.36

Para obter apenas a hora dessa string, digite "echo% time: ~ -11,2%" para exibir apenas os 2 primeiros caracteres. Você está basicamente dizendo para exibir a variável% time% - "echo% time ...", conte 11 caracteres para trás a partir do final da string - "...: ~ 11 ..." e pegue 2 caracteres daquela ponto - "..., 2%"

Para pegar os minutos, o comando seria "echo% time: ~ 8,2%"

Para definir a variável "hora" para a hora atual, digite isso:

hora definida =% tempo: ~ -11,2%

Você também pode agrupar partes para criar um formato personalizado em qualquer combinação que você precisar também. Por exemplo, para adicionar traços em vez de dois-pontos entre o HH: MM: SS, você digitaria isto:

"echo% time: ~ -11,2% -% tempo: ~ -8,2% -% tempo: ~ -5,2%"

e obtenha: HH-MM-SS

Espero que isso ajude. Usamos a variável% date% e partes dela o tempo todo para criar automaticamente os arquivos em qualquer combinação de strings que precisamos que o nome do arquivo esteja dentro.

    
por 28.08.2009 / 17:27
1

Combinando a resposta de Merstzik e Benoit e salvando uma chamada para um programa externo, você pode fazer isso:

FOR /F "TOKENS=1 DELIMS=:" %%A IN ("%TIME%") DO SET HH=%%A
FOR /F "TOKENS=2 DELIMS=:" %%A IN ("%TIME%") DO SET MM=%%A
    
por 28.08.2009 / 17:36
0

É perigoso tentar fazer isso no CMD, porque o resultado de TIME / T ou% TIME% depende do local. Se você está definido em um único local, você pode fazer isso:

FOR /F "TOKENS=1,2 DELIMS=: " %%A IN ('TIME/T') DO SET HH=%%A && SET MM=%%B

No entanto, seria melhor usar o PowerShell. Scripts CMD são difíceis de escrever de forma robusta. Há muito o que aprender sobre como escrever bons scripts CMD, mas seria melhor aplicar essas células cerebrais ao PowerShell.

$hour = (Get-Date).Hour
    
por 24.12.2011 / 04:33