Я не могу понять, почему одновременно IF и ELSE удовлетворяют этому условию.

@echo off
    setlocal enabledelayedexpansion enableextensions

    Set filename=Credit_Limits\Input\BR_Credit_Limit_Upload.csv
    if exist %filename% (
        FOR /F "tokens=1-3* delims=," %%A IN (%filename%) DO ( 
                  if %%~A == External_ID_vod__c (
                    if %%~B == M_NA_BR_Credit_Limit_CU__c (
                        if %%~C == CurrencyISOCode (
                            echo good
                        )
                    )
                  )   
                  goto :break
                )
        )
        :break      
    ) else (
        echo file doesn't exist
    )

Я получаю ниже вывод всегда:

good 
file doesn't exist

3 ответа3

0

Другим вариантом может быть просто не использовать оператор ELSE. В следующем примере используется меньше скобок, чем в предыдущем примере кода, но он должен быть эквивалентным.

@Echo Off
SETLOCAL EnableExtensions EnableDelayedExpansion

Set filename=Credit_Limits\Input\BR_Credit_Limit_Upload.csv
if NOT exist %filename% goto nofile

FOR /F "tokens=1-3* delims=," %%A IN (%filename%) DO (
    if "%%~A" == "External_ID_vod__c" if "%%~C" == "CurrencyISOCode" (
        if "%%~B" == "M_NA_BR_Credit_Limit_CU__c" echo good
    )
)    
goto done

:nofile
echo File doesn't exist

:done
0

Ваш цикл FOR все еще работает после выполнения условия. Он попадает в условие, выводит "хорошо", продолжает цикл в следующих циклах, после чего снова попадает в условие, что приводит к ложному выводу и выводу "файл не существует".

Вы должны либо добавить условие в свой цикл FOR, которое заставит код выйти из него, в результате чего будет достигнуто истинное условие, либо поставить goto, чтобы обойти ложное условие, если выполняется true.

0

Во- первых: есть один ) закрывающая скобка в вашем коде; упрощенный пример:

@ECHO OFF
SETLOCAL EnableExtensions EnableDelayedExpansion
if 1==1 (
  echo good
  )
) else (
  echo file doesn't exist
)

Выход:

==> D:\bat\SU\993931.bat
good
file doesn't exist

Во- вторых , как правило, никогда не :label , ни :: label-like comment внутри командного блока , заключенного в () скобках. Для доказательства и примеров, прочитайте

Наконец, как

используйте (опять же как общее правило) правильные двойные кавычки следующим образом:

              if "%%~A" == "External_ID_vod__c" (
                if "%%~B" == "M_NA_BR_Credit_Limit_CU__c" (
                    if "%%~C" == "CurrencyISOCode" (

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .