pourquoi ne sqlcmd -v foo = « c: \ chemin » manger le « c: »?
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?
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 \