我已经搜索了StackOverflow几个小时,并尝试了类似问题的不同建议,但到目前为止没有任何正确传递参数(双引号,^
)。
这是它的简短版本:
@echo off
cd C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\
start /w "sqlcmd" sqlcmd.exe -S DBserverName -U username -P p@ssword -i C:\query.sql -s"," | findstr /V /C:"-" /B >c:\output.csv
基本上,我想传递一个包含分隔符的相当长的参数。但我发现这种情况的唯一方法就是使用参数。我想尽量保持简单。这是唯一的办法吗?你能举例说明这可能有用吗?
提前致谢。
答案 0 :(得分:2)
我不确定这是否重要,但我认为-s
和","
之间应该有空格
但更重要的是,你的管道结构是错误的。您的sqlcmd命令在新窗口中运行,但您的管道正在原始窗口中查找START命令本身的输出 - 并且没有任何输出。
您可以通过转义管道和重定向来使命令工作。
@echo off
cd C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\
start /w "sqlcmd" sqlcmd.exe -S DBserverName -U username -P p@ssword -i "C:\query.sql" -s "," ^| findstr /V /C:"-" /B ^>"c:\output.csv"
但根本不需要使用START。您的脚本可以直接执行sqlcmd,一切都更简单。
@echo off
cd C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\
sqlcmd.exe -S DBserverName -U username -P p@ssword -i "C:\query.sql" -s "," | findstr /V /C:"-" /B >"c:\output.csv"
您可能还遇到密码问题,具体取决于使用的字符。您可能必须引用和/或转义密码,sqlcmd.exe可能有自己的转义规则。如果是,那么您可能不得不担心转义为cmd.exe和sqlcmd.exe。
答案 1 :(得分:0)
这一行应该在整个路径上有双引号,在某些情况下很重要。
cd C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\
并且start命令在开头需要双引号,因为它将第一个集合作为窗口标题。
start "" /w ....