Question

Je foo.sql comme:

print 'foo=$(foo)'

Ensuite, je dois en foo.cmd le script shell suivant:

sqlcmd -i foo.sql -v foo="c:\path"

L'exécution imprime foo.cmd:

foo=\path

comment puis-je échapper au "c:"? dos-shell est en train de manger, ou est-il sqlcmd?

Était-ce utile?

La solution 2

OK, mon erreur. ce qui précède fonctionne.

Ce que je fait de mal a été fait: sqlcmd -i foo.sql -v foo = 'c: \ path'

(guillemet simple, puisque je les ai essayé de passer comme « » string sql) qui ne fonctionnera pas. il coupera le répertoire c:

Autres conseils

Les délimiteurs argument de cmd comprennent le signe égal. Je l'ai vu dans d'autres cas (comme bjam.exe) que la totalité de la séquence de paramètres doit être cité pour fonctionner correctement.

Essayez ceci:

sqlcmd -i foo.sql -v "foo=c:\path"

Si elle déshabille toujours le « c: » partie, je me concentrerais sur sqlcmd. Je n'ai pas personnellement installé pour tester avec. Ceci est basé uniquement sur l'expérience des situations similaires.

L'utilisation provoque un autre shell cela.

Je viens d'avoir ce lors de l'exécution sqlcmd via Powershell. Commencé à utiliser cmd.exe et il a bien fonctionné

guillemets doubles pour échapper aux « : » et guillemets simples afin que sql traité la valeur de la variable comme une chaîne. par exemple.

sqlcmd -S. -d MyDB -i \ test.sql -v PathToFile = " 'D: \ Temp \ temp \ My.csv'".

échapper la barre oblique inverse,

sqlcmd -i foo.sql -v foo="c:\\path"

Il est en fait votre shell manger le \

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top