2009-12-23 35 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 

Nếu tôi chạy tập lệnh trên, tôi nhận được lỗi sau. Bất cứ ai có thể giúp đỡ?Nếu điều kiện trong các tệp hàng loạt

Cú pháp của lệnh là không chính xác.

Cảm ơn.

Trả lời

23

Echo cần thể là ở phần cuối của câu lệnh if:

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

hoặc các hình thức sau đây:

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

Tôi có xu hướng sử dụng trước đây cho điều kiện rất đơn giản và sau đó cho các lệnh đa lệnh và nguyên tắc while nguyên thủy:

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

Wh tại đoạn mã cụ thể của bạn đang làm là cố gắng thực hiện lệnh if %var1%=="Yes" không hợp lệ trong và của chính nó.

+0

Cảm ơn. Nó chỉ áp dụng cho echo hoặc cho tất cả các lệnh theo sau như một kết quả tích cực cho câu lệnh if? – bdhar

+0

@bdhar, đó là cú pháp cho lệnh 'if', vâng, tất cả chúng, không chỉ là tiếng vọng. – paxdiablo

+1

+1 cho một vòng lặp while trong tập tin thực thi. –

3

Hãy xem trên NẾU lệnh giúp đỡ:

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 

Vì vậy, bạn chỉ huy phải nằm trong cùng NẾU dòng. Tập lệnh của bạn phải là:

@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

Bạn không thể đặt dòng mới như thế ở giữa IF. Vì vậy, bạn có thể làm điều này:

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

Hoặc, nếu bạn không muốn phát biểu của bạn trải rộng trên nhiều dòng, bạn có thể sử dụng dấu ngoặc:

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

Tuy nhiên, khi bạn đang sử dụng dấu ngoặc hãy cẩn thận, bởi vì biến mở rộng có thể không hoạt động như bạn mong đợi. Ví dụ:

set myvar=orange 

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

Đầu ra:

orange 

Điều này là do tất cả mọi thứ giữa dấu ngoặc được coi là một tuyên bố duy nhất và tất cả các biến được mở rộng trước khi bất kỳ lệnh giữa khung đang chạy. Bạn có thể làm việc xung quanh sử dụng mở rộng chậm trễ này:

setlocal enabledelayedexpansion 
set myvar=orange 

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

Tư vấn Sage. TẤT CẢ các script cmd của tôi bắt đầu với 'setlocal enableextensions enabledelayedexpansion' (và kết thúc bằng '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 
Các vấn đề liên quan