当应用程序使用stdin从批处理中运行时,如何将标准输入提供给批处理文件?

时间:2008-12-04 21:23:25

标签: batch-file stdin dos

这是一个最小的批处理文件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)。

2 个答案:

答案 0 :(得分:2)

我不知道它是否有帮助,但您可以尝试将其他内容传递给sqlcmd,例如:

echo. | sqlcmd -?

答案 1 :(得分:2)

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

sqlcmd -? < NUL

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