Problema de expansão adiada clássico.
Seu problema é que a %time%
expansão ocorre quando a instrução é analisada e todo o bloco entre parênteses é analisado ao mesmo tempo, antes que qualquer comando seja executado.
Existem três soluções possíveis:
1) Use em TIME /T
vez disso
Isso evita toda a questão do tempo de expansão. Mas o formato é diferente e há uma nova linha após o tempo, portanto você não pode adicionar um rótulo ao final.
time /t
echo Backing up first part
Se você quiser a etiqueta na mesma linha, poderá reverter a ordem e usar SET / P
<nul set /p "Backing up first part - "
time /t
Ou você pode capturar a saída com um loop FOR / F e colocar tudo em uma linha
for /f "delims=" %%T in ('time /t') do echo %%T - Backing up first part:
2) Use CALL e porcentagens duplicadas para obter uma rodada extra de análise
call echo %%time%% - Backing up first part:
Consulte Como o interpretador de comandos do Windows (CMD.EXE) analisa scripts? para entender por que isso funciona. As fases 1 e 6 são relevantes aqui. Mas esteja avisado - é um monte de material muito denso que levará tempo para digerir.
3) Use expansão atrasada
Essa é a técnica que eu prefiro usar.
Isso é muito mais rápido que o hack CALL. Requer SETLOCAL para habilitar a expansão atrasada e usar em !
vez de %
expandir a variável:
setlocal enableDelayedExpansion
> C:\log\%date:~3,2%-%date:~0,2%.log (
echo !time! - Backing up first part
... some logic
echo !time! - Backing up second part
...
)