我有 foo.sql 作为:
print 'foo=$(foo)'
然后我在 foo.cmd 中有以下 shell 脚本:
sqlcmd -i foo.sql -v foo="c:\path"
运行 foo.cmd 打印:
foo=\path
我如何逃避“c:”?是dos-shell吃掉它,还是sqlcmd?
cmd 的参数分隔符包括等号。我在其他情况下(例如 bjam.exe)看到必须引用整个参数序列才能正常工作。
试试这个:
sqlcmd -i foo.sql -v "foo=c:\path"
如果它仍然剥离“c:”部分,我将专注于 sqlcmd。我个人没有安装它来测试。这仅基于类似情况的经验。
好吧,我的错。以上确实有效。
我做错了什么: sqlcmd -i foo.sql -v foo='c:\path'
(单引号,因为我试图将它们作为 ' ' sql 字符串传递)这是行不通的。它会砍掉c:
使用另一个外壳会导致这种情况。
我只是在通过 powershell 运行 sqlcmd 时遇到了这个问题。切换到使用 cmd.exe 并且工作正常
双引号转义“:”和单引号,以便 sql 将变量值视为字符串。例如
sqlcmd -S 。-d myDb -i .\test.sql -v pathToFile = "'D:\Temp\temp\My.csv'"
转义反斜杠,
sqlcmd -i foo.sql -v foo="c:\\path"
实际上是你的壳在吃\