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.
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!
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:>
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)
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.
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
É 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