1

我有 foo.sql 作为:

print 'foo=$(foo)'

然后我在 foo.cmd 中有以下 shell 脚本:

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

好吧,我的错。以上确实有效。

我做错了什么: sqlcmd -i foo.sql -v foo='c:\path'

(单引号,因为我试图将它们作为 ' ' sql 字符串传递)这是行不通的。它会砍掉c:

于 2010-01-14T04:49:17.003 回答
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 回答
-2

转义反斜杠,

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

实际上是你的壳在吃\

于 2010-01-13T06:26:47.983 回答