Jawaban:
var2 diset, tetapi ekspansi di baris echo %var2%
terjadi sebelum blok dijalankan.
Saat ini var2
kosong.
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 EnableDelayedExpansion
diperlukan 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 goto
sintaks
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