Jawaban:
var2 diset, tetapi ekspansi di baris echo %var2%terjadi sebelum blok dijalankan.
Saat ini var2kosong.
Oleh karena itu sintaks delayExpansion ada, yang digunakan !sebagai ganti dari %dan dievaluasi pada waktu eksekusi, bukan waktu parse.
Harap dicatat bahwa untuk menggunakan !, setlocal EnableDelayedExpansiondiperlukan pernyataan tambahan .
setlocal EnableDelayedExpansion
set var1=true
if "%var1%"=="true" (
set var2=myvalue
echo !var2!
)
&dan &&. Kode ini set x=some & set y=%x%thing & echo results %y%menghasilkan %x%thing.
Saya agak telat ke partai tapi cara lain untuk mengatasi kondisi ini adalah melanjutkan proses di luar if, seperti ini
set var1=true
if "%var1%"=="true" (
set var2=myvalue
)
echo %var2%
Atau / dan gunakan gotosintaks
set var1=true
if "%var1%"=="true" (
set var2=myvalue
goto line10
) else (
goto line20
)
. . . . .
:line10
echo %var2%
. . . . .
:line20
Dengan cara ini ekspansi terjadi "pada waktunya" dan Anda tidak perlu setlocal EnableDelayedExpansion. Intinya, jika Anda memikirkan kembali desain skrip Anda, Anda dapat melakukannya seperti itu
echo off set var1=true if "%var1%"=="true" ( set var2=myvalue ) echo %var2% pause.. dan berhasil. "jika Anda akan membuat variabel dalam file batch yang dapat diakses di mana saja dalam program." . aticleworld.com/batch-file-variables-and-scope