У меня есть настроенный командный файл, использующий команду SQL, которая передается в командный файл. Когда я вызываю эту переменную, строка не отображается. Я получаю сообщение об ошибке "Команда SQL не распознана".

В моем файле я делаю что-то вроде этого:

ECHO OFF
set vSQL=%~2

echo %vSQL%

Переменная sql, которую я передаю в файл, включает в себя операцию «меньше, чем»: select * from sometable where c3 < 999999999 .

Я попытался добавить ^ к этому: ...c3 ^< 999999999 , но это все равно не сработало. Я получаю ту же ошибку. Есть ли другой способ использовать < в командном файле?

И да, я уверен, что именно эта часть файла вызывает проблему. Я запустил всю SQL-операцию в sqldeveloper, где она работала нормально, как есть.

1 ответ1

0

Пакетный анализатор использует следующие параметры для разделения параметров: <space> <tab> ; , = <0xFF> Этот последний символ является неразрывным пробелом.

Невозможно избежать разделителей параметров в командной строке. Единственный способ включить разделитель в значение параметра - заключить весь параметр в двойные кавычки.

Таким образом, вы можете вызвать ваш скрипт, используя: yourScript.bat "select * from sometable where c3 < 999999999" . Поскольку < теперь цитируется, вам не нужно беспокоиться о том, чтобы избежать его.

Кавычки считаются частью значения. При использовании модификатора ~ в %~2 кавычки будут удалены из значения параметра. Но теперь вам нужно беспокоиться о перевоспитании или о том, чтобы избежать < . Самое простое, что нужно сделать, это добавить кавычки вокруг всего выражения присваивания: set "vSQL=%~2" . Когда все сделано таким образом, кавычки защищают < , но они не включаются в значение.

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

setlocal enableDelayedExpansion
echo !vSQL!

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