oeuftete
oeuftete

Reputation: 2718

How can I feed standard input to a batch file when an app run from the batch mucks with stdin?

Here's a minimal batch file, demo.bat, to illustrate my problem:

@ECHO off

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

sqlcmd -?

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

I have an input file foo.txt that looks like so:

foo_value
bar_value

I run my batch file as demo.bat < foo.txt. The output is:

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"

If I remove the sqlcmd -?, then bar is "typed" as bar_value, which is what I originally expected.

So, it looks to me like sqlcmd is not playing nice somehow with the standard input that wasn't meant for it. Anyone have any bright ideas on how I can work around it? In a perfect world, the solution would not involve changing the original batch file, or involve installing third-party packages to drive the interaction (e.g. Expect).

Upvotes: 3

Views: 9010

Answers (2)

Patrick Cuff
Patrick Cuff

Reputation: 29806

You can also redirect NUL to sqlcmd:

sqlcmd -? < NUL

but this would require changing the batch script as well.

Upvotes: 2

wimh
wimh

Reputation: 15232

I don't know if it helps, but you can try to pipe something else to sqlcmd, for example:

echo. | sqlcmd -?

Upvotes: 2

Related Questions