Klasik masalah ekspansi tertunda.
Masalahmu adalah itu %time% ekspansi terjadi ketika pernyataan diuraikan, dan seluruh blok di-kurung diuraikan pada saat yang sama, sebelum perintah dijalankan.
Ada tiga solusi yang mungkin:
1) Gunakan TIME /T sebagai gantinya
Ini menghindari seluruh masalah waktu ekspansi. Tetapi formatnya berbeda, dan ada baris baru setelahnya, jadi Anda tidak dapat menambahkan label di akhir.
time /t
echo Backing up first part
Jika Anda ingin label pada baris yang sama, maka Anda dapat membalik urutan dan menggunakan SET / P
<nul set /p "Backing up first part - "
time /t
Atau Anda dapat menangkap output dengan loop FOR / F dan meletakkan semuanya pada satu baris
for /f "delims=" %%T in ('time /t') do echo %%T - Backing up first part:
2) Gunakan PANGGILAN dan gandakan persen untuk mendapatkan putaran parsing tambahan
call echo %%time%% - Backing up first part:
Lihat Bagaimana skrip parse Windows Command Interpreter (CMD.EXE)? untuk memahami mengapa ini berhasil. Fase 1 dan 6 relevan di sini. Tapi waspadalah - banyak bahan yang sangat padat yang akan membutuhkan waktu untuk dicerna.
3) Gunakan ekspansi yang tertunda
Ini adalah teknik yang saya lebih suka gunakan.
Ini jauh lebih cepat daripada hack CALL. Dibutuhkan SETLOCAL untuk mengaktifkan ekspansi yang tertunda, dan penggunaan ! dari pada % untuk memperluas variabel:
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
...
)