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