Как я могу подать стандартный ввод в пакетный файл, когда приложение запускается из пакетного пакета с помощью stdin? - PullRequest
3 голосов
/ 05 декабря 2008

Вот минимальный пакетный файл, 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 ]

2 голосов
/ 05 декабря 2008

Вы также можете перенаправить NUL в sqlcmd:

sqlcmd -? < NUL

но для этого также потребуется изменить пакетный скрипт.

2 голосов
/ 05 декабря 2008

Не знаю, поможет ли это, но вы можете попробовать передать что-то еще в sqlcmd, например:

echo. | sqlcmd -?
...