2009-12-23 15 views
14
@echo off 
SET var1="Yes" 
SET var2="No" 
SET var3="Yes" 
if %var1%=="Yes" 
    echo Var1 set 
if %var2%=="Yes" 
    echo Var2 set 
if %var3%=="Yes" 
    echo Var3 set 

यदि मैं उपरोक्त स्क्रिप्ट चलाता हूं तो मुझे निम्न त्रुटि मिलती है। क्या कोई मदद कर सकता है?यदि बैच फ़ाइलों में स्थिति

कमांड का सिंटैक्स गलत है।

धन्यवाद।

उत्तर

23

गूंज या तो अगर बयान के अंत में होने की जरूरत है:

if %var1%=="Yes" echo Var1 set 

या निम्न रूप में:

if %var1%=="Yes" (
    echo Var1 set 
) 

मैं बहुत ही सरल सशर्त, और के लिए पूर्व का उपयोग करते हैं

:while1 
    if %var1%=="Yes" (
     :: Do something that potentially changes var1 
     goto :while1 
    ) 

Wh: बहु आदेश लोगों और आदिम while बयान के लिए बाद कोड के आपके विशेष भाग पर if %var1%=="Yes" कमांड निष्पादित करने का प्रयास कर रहा है जो स्वयं में मान्य नहीं है।

C:\Users\Rubens>if /? 
Performs conditional processing in batch programs. 

IF [NOT] ERRORLEVEL number command 
IF [NOT] string1==string2 command 
IF [NOT] EXIST filename command 

तो, आप कमांड लाइन अगर एक ही में होना चाहिए:

+0

धन्यवाद। क्या यह केवल गूंज या सभी आदेशों के लिए लागू है जो कि अगर कथन के सकारात्मक परिणाम के रूप में पालन करते हैं? – bdhar

+0

@bdhar, यह 'if' कमांड के लिए वाक्यविन्यास है, हां, उनमें से सभी, सिर्फ गूंज नहीं। बैच फ़ाइल में थोड़ी देर के लिए – paxdiablo

+1

+1। –

3

यदि आदेश मिलने वाली सहायता पर एक नजर डालें। आपकी स्क्रिप्ट होना चाहिए:

@echo off 
SET var1="Yes" 
SET var2="No" 
SET var3="Yes" 
if %var1%=="Yes" echo Var1 set 
if %var2%=="Yes" echo Var2 set 
if %var3%=="Yes" echo Var3 set 
8

आप IF के बीच में इस तरह एक नई पंक्ति नहीं डाल सकते हैं। तो अगर आप ऐसा कर सकता है:

if %var1%=="Yes" echo Var1 set 

या, यदि आप अपने बयान कई पंक्तियों में फैले आप कोष्ठक का उपयोग कर सकते चाहते हैं: जब आप कोष्ठक सावधान रहना होगा का उपयोग कर रहे

if %var1%=="Yes" (
    echo Var1 set 
) 

हालांकि, क्योंकि चर विस्तार के रूप में विस्तार व्यवहार नहीं कर सकता है।

set myvar=orange 

if 1==1 (
    set myvar=apple 
    echo %myvar% 
) 

आउटपुट: उदाहरण के लिए:

orange 

इसका कारण यह है कोष्ठक के बीच सब कुछ एक भी बयान के रूप में व्यवहार किया जाता है और सभी चर के बीच कोष्ठक चलाए जा रहे हैं आदेश में से किसी से पहले का विस्तार कर रहे हैं। आप इस का उपयोग कर देरी विस्तार को हल करने के कर सकते हैं:

setlocal enabledelayedexpansion 
set myvar=orange 

if 1==1 (
    set myvar=apple 
    echo !myvar! 
) 
+1

ऋषि सलाह। मेरी सभी cmd स्क्रिप्ट 'setlocal enableextensions enableelayedexpansion' (और 'endlocal' के साथ समाप्त होती हैं) से शुरू होती हैं। – paxdiablo

1
@echo off 
setlocal enabledelayedexpansion 

set var1=1 
set var2=2 
set var3=1 

if "!var1!" == "1" echo Var1 set 
if "!var2!" == "1" echo Var2 set 
if "!var3!" == "1" echo Var3 set 
pause 
संबंधित मुद्दे