3

这是一个最小的批处理文件demo.bat,来说明我的问题:

@ECHO off

set /p foo=Enter foo:
echo.
echo you typed "%foo%"

sqlcmd -?

set /p bar=Enter bar:
echo.
echo you typed "%bar%"

foo.txt我有一个看起来像这样的输入文件:

foo_value
bar_value

我将批处理文件作为demo.bat < foo.txt. 输出是:

输入 foo:
你输入了“foo_value”
Microsoft (R) SQL Server 命令行工具
版本 9.00.3042.00 NT 英特尔 X86
版权所有 (c) 微软公司。版权所有。

用法:sqlcmd [-U登录id] [-P密码]
  (...ETC...)

输入栏:
你输入了“foo_value”

如果我删除sqlcmd -?, 那么 bar 被“键入”为bar_value,这是我最初所期望的。

所以,在我看来,sqlcmd使用不适合它的标准输入以某种方式表现不佳。有人对我如何解决它有任何好主意吗?在一个完美的世界中,该解决方案不会涉及更改原始批处理文件,或涉及安装第三方包来驱动交互(例如,Expect)。

4

2 回答 2

2

我不知道它是否有帮助,但是您可以尝试将其他内容通过管道传输到 sqlcmd,例如:

echo. | sqlcmd -?
于 2008-12-04T22:14:58.140 回答
2

您还可以将 NUL 重定向到 sqlcmd:

sqlcmd -? < NUL

但这也需要更改批处理脚本。

于 2008-12-05T12:34:34.880 回答