3

I've scoured StackOverflow for a few hours, and tried different suggestions for similarly asked questions, but nothing passed the parameters correctly so far (double quotes, ^).

Here's the short version of it:

@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

Basically, I want to pass a rather long parameter containing delimiters. But the only way I see that happen is to use arguments. I'd like to keep it as simple as possible. Is this the only recourse? Can you offer an example how this might work?

Thanks in advance.

4

2 回答 2

3

我不确定这是否重要,但我认为-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 的转义。

于 2013-06-09T13:42:54.873 回答
1

这条线应该在整个路径周围有双引号,在某些情况下它很重要。

cd C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\

并且 start 命令在开头需要双引号,因为它将第一个集合作为窗口标题。

start "" /w ....
于 2013-06-09T14:45:32.143 回答