Классическая проблема с отложенным расширением.
Ваша проблема заключается в том, что %time%
раскрытие происходит, когда оператор анализируется, и весь блок в скобках анализируется в то же время, прежде чем какие-либо команды будут выполнены.
Есть три возможных решения:
1) Вместо этого используйте TIME /T
Это позволяет избежать всего вопроса о сроках расширения. Но формат другой, и через некоторое время появляется новая строка, поэтому вы не можете добавить метку в конец.
time /t
echo Backing up first part
Если вы хотите, чтобы метка находилась на одной и той же строке, вы можете изменить порядок и использовать SET /P
<nul set /p "Backing up first part - "
time /t
Или вы можете захватить вывод с помощью цикла FOR /F и поместить все в одну строку
for /f "delims=" %%T in ('time /t') do echo %%T - Backing up first part:
2) Используйте CALL и удвоенный процент, чтобы получить дополнительный раунд анализа
call echo %%time%% - Backing up first part:
См. Как интерпретатор сценариев команд Windows (CMD.EXE) анализирует? для понимания того, почему это работает. Фазы 1 и 6 актуальны здесь. Но будьте предупреждены - это много очень плотного материала, который займет время, чтобы переварить.
3) Используйте отложенное расширение
Это техника, которую я предпочитаю использовать.
Это намного быстрее, чем взломать CALL. Требуется SETLOCAL для включения отложенного расширения и использования !
вместо %
чтобы развернуть переменную:
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
...
)