这是一个最小的批处理文件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
运行。输出是:
Enter foo: you typed "foo_value" Microsoft (R) SQL Server Command Line Tool Version 9.00.3042.00 NT INTEL X86 Copyright (c) Microsoft Corporation. All rights reserved. usage: Sqlcmd [-U login id] [-P password] (...etc...) Enter bar: you typed "foo_value"
如果我删除了sqlcmd -?
,则条形码被“键入”为bar_value
,这是我原先预期的。
所以,在我看来,sqlcmd
对于不适合它的标准输入并不是很好。任何人都有
关于我如何解决它的任何好主意?在一个完美的世界中,解决方案不会涉及改变原件
批处理文件,或涉及安装第三方软件包以推动交互(例如Expect)。
答案 0 :(得分:2)
我不知道它是否有帮助,但您可以尝试将其他内容传递给sqlcmd,例如:
echo. | sqlcmd -?
答案 1 :(得分:2)
您还可以将NUL重定向到sqlcmd:
sqlcmd -? < NUL
但这也需要更改批处理脚本。