2015-10-07 2 views
0

Это мой код:синтаксиса команды неверен - множественный, если условия для цикла

for %%a in (%TESTS%) do (
    IF not "%%a" == "tests/xxxx/yyyy/zzzz/test1" (
    IF not "%%a" == "tests/qqqq/ssss/bbbb/test1892" (
    and so on... 
    ) 
    ) 
) 

Если бы я получил около сто условия, если, я стал получать такую ​​ошибку: «Синтаксис команды является неверно " И если я прокомментировал несколько (любой) линии IF, ошибка отсутствует.

Что является проблемой с этим кодом?

Приветствия.

+0

Вы должны добавить пример, где ошибка воспроизводима. Код, который вы опубликовали, не содержит ошибок. Возможно, у реального кода есть некоторые неэкранированные специальные символы. Такие бессмысленные ошибки могут также отображаться, если вы пытаетесь использовать переменную несколько раз внутри цикла, и в этом случае следует использовать [задержанное расширение] (http://ss64.com/nt/delayedexpansion.html). – wOxxOm

+3

Максимальная длина команды составляет 8 КБ (около 8190 символов). Я предлагаю вам выполнить эти множественные тесты по-другому. Например: вставьте все строки поиска в файл и используйте 'findstr'. – Aacini

+0

Работает с опцией findstr. У меня уже есть файл со всей строкой поиска, поэтому я использую это решение. Однако у меня есть строка в выводах из файла, который содержит поисковую фразу. Например: Findstr/с: "%% A" Makefile \t \t \t IF Равен 1 ( \t \t \t \t бэр сделать SMTH \t \t \t) Мои ouptputs (в консоли): TESTS_LIST + = test1 TESTS_LIST + = test1892 Есть ли вероятность, что эта строка не будет присутствовать в выходах после выполнения сценариев? –

ответ

0

Наиболее вероятно, что вы превысили лимит в 8192 символов для командной строки/блока.
Таким образом, вы можете попробовать следующее:

for %%a in (%TESTS%) do (
    call :SUB "%%~a" 
) 
exit /B 

:SUB 
if "%~1"=="tests/xxxx/yyyy/zzzz/test1" exit /B 
if "%~1"=="tests/qqqq/ssss/bbbb/test1892" exit /B 
rem and so on... 
echo do your action(s) here (done only in NONE of the listed strings match)! 
exit /B 

В if заявления инвертируются и поэтому не должны быть вложенными.
Поскольку линии if передаются подпрограмме :SUB, они больше не являются частью слишком длинной командной строки/блока for.

Смежные вопросы