É possível escapar de um quilate (^) de uma variável citada?

0

Eu tenho um arquivo em lotes que eu configurei usando um comando SQL que é passado para um arquivo de comando. Quando eu chamo esta variável no entanto, a linha não aparece. Eu recebo um erro "Comando SQL não reconhecido".

No meu arquivo, faço algo assim:

ECHO OFF
set vSQL=%~2

echo %vSQL%

A variável sql que estou passando para o arquivo inclui uma operação menor que: select * from sometable where c3 < 999999999 .

Eu tentei adicionar o ^ a este: ...c3 ^< 999999999 , mas isso ainda não funcionou. Eu recebo o mesmo erro. Existe outra maneira de usar < em um arquivo de lote?

E sim, tenho certeza de que é a parte do arquivo que está causando o problema. Eu corri toda a operação SQL no sqldeveloper onde funcionou bem como é.

    
por robert 22.08.2013 / 05:28

1 resposta

0

O analisador de lote usa o seguinte para delimitar os parâmetros: <space> <tab> ; , = <0xFF> Esse último caractere é um espaço sem quebra.

É impossível escapar dos delimitadores de parâmetro na linha de comando. A única maneira de incluir um delimitador em um valor de parâmetro é colocar o parâmetro inteiro entre aspas duplas.

Você pode chamar seu script usando: yourScript.bat "select * from sometable where c3 < 999999999" . Como o < agora é citado, você não precisa se preocupar em escapar dele.

As cotações são consideradas parte do valor. Seu uso do modificador ~ em %~2 removerá as aspas do valor do parâmetro. Mas agora você precisa se preocupar em reciclar ou então escapar do < . A coisa mais simples a fazer é adicionar aspas em toda a expressão de atribuição: set "vSQL=%~2" . Quando feito dessa maneira, as aspas protegem o < , mas elas não são incluídas no valor.

Quando chega a hora de usar a variável, você precisa se preocupar novamente com o caractere < . Nesse caso, é mais simples ativar e usar a expansão atrasada.

setlocal enableDelayedExpansion
echo !vSQL!
    
por 22.08.2013 / 21:50

Tags