Klasyczny problem z opóźnioną ekspansją.
Problem polega na tym, że %time%
rozszerzenie występuje podczas analizowania instrukcji, a cały blok w nawiasach jest analizowany w tym samym czasie, przed wykonaniem jakichkolwiek poleceń.
Istnieją trzy możliwe rozwiązania:
1) Użyj TIME /T
zamiast tego
Pozwala to uniknąć całego problemu z czasem ekspansji. Ale format jest inny i po pewnym czasie pojawia się nowa linia, więc nie można dodać etykiety na końcu.
time /t
echo Backing up first part
Jeśli chcesz etykiety w tym samym wierszu, możesz odwrócić kolejność i użyć SET / P
<nul set /p "Backing up first part - "
time /t
Lub możesz uchwycić wyjście za pomocą pętli FOR / F i umieścić wszystko w jednym wierszu
for /f "delims=" %%T in ('time /t') do echo %%T - Backing up first part:
2) Użyj POŁĄCZENIA i podwojonych procentów, aby uzyskać dodatkową rundę analizy
call echo %%time%% - Backing up first part:
Zobacz, jak interpretuje skrypty interpretera poleceń systemu Windows (CMD.EXE)? dla zrozumienia, dlaczego to działa. Fazy 1 i 6 są tutaj istotne. Ale ostrzegam - jest to bardzo gęsty materiał, którego trawienie zajmie trochę czasu.
3) Użyj opóźnionego rozszerzenia
Jest to technika, której wolę używać.
Jest to znacznie szybsze niż włamanie do CALL. Wymaga SETLOCAL, aby umożliwić opóźnioną ekspansję i użyć !
zamiast zamiast %
do rozwinięcia zmiennej:
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
...
)