Mantıken, Cody'nin cevabı olmalıdır çalışır. Ancak komut isteminin bir kod bloğunu mantıksal olarak işlediğini düşünmüyorum. Hayatım boyunca, bloğun içindeki tek bir komuttan daha fazla düzgün çalışmasını sağlayamıyorum. Benim durumumda, kapsamlı testler, blok içindeki tüm komutların önbelleğe alındığını ve bloğun sonunda aynı anda yürütüldüğünü ortaya çıkardı. Bu elbette beklenen sonuçları vermez. İşte aşırı basitleştirilmiş bir örnek:
if %ERRORLEVEL%==0 (
set var1=blue
set var2=cheese
set var3=%var1%_%var2%
)
Bu , var3'e aşağıdaki değeri sağlamalıdır:
blue_cheese
ancak bunun yerine şunu verir:
_
çünkü 3 komutun tümü önbelleğe alınır ve kod bloğundan çıkıldığında aynı anda yürütülür.
Bu sorunun üstesinden, if bloğunu yalnızca bir komutu - goto - çalıştırmak için yeniden yazıp birkaç etiket ekleyerek aşabildim. Hantal ve pek sevmiyorum ama en azından işe yarıyor.
if %ERRORLEVEL%==0 goto :error0
goto :endif
:error0
set var1=blue
set var2=cheese
set var3=%var1%_%var2%
:endif