1

私は foo.sql を次のように持っています:

print 'foo=$(foo)'

次に、foo.cmd に次のシェル スクリプトがあります。

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

foo.cmd を実行すると、次のように出力されます。

foo=\path

「c:」をエスケープするにはどうすればよいですか? dos-shell がそれを食べていますか、それとも sqlcmd ですか?

4

4 に答える 4

1

cmd の引数区切り文字には等号が含まれます。他のケース (bjam.exe など) では、適切に機能するためにパラメーター シーケンス全体を引用符で囲む必要があることがわかりました。

これを試して:

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

それでも「c:」部分が削除される場合は、sqlcmd に焦点を当てます。私は個人的にテストするためにインストールしていません。これは、同様の状況での経験のみに基づいています。

于 2010-01-13T16:29:42.823 に答える
0

別のシェルを使用すると、これが発生します。

PowerShell経由でsqlcmdを実行したときにこれがありました。cmd.exe の使用に切り替え、正常に動作しました

":" をエスケープする二重引用符と単一引用符を使用して、SQL が変数値を文字列として扱うようにします。例えば

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

于 2014-10-21T08:29:12.893 に答える
0

OK、私の間違いです。上記は機能します。

私が間違っていたこと: sqlcmd -i foo.sql -v foo='c:\path'

(単一引用符、' ' SQL 文字列として渡そうとしたため) は機能しません。それはcを切り刻みます:

于 2010-01-14T04:49:17.003 に答える
-2

バックスラッシュをエスケープし、

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

それは実際にあなたの殻が\を食べている

于 2010-01-13T06:26:47.983 に答える