2008-12-04 6 views
3

Вот минимальный пакетный файл, demo.bat, чтобы проиллюстрировать мою проблему:Как я могу подавать стандартный ввод в пакетный файл, когда приложение запускается из пакетных mucks с помощью stdin?

@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

Есть ли другие команды или программы, демонстрирующие это поведение? У меня нет sqlcmd, и я не могу найти другую программу, которая воспроизводит эту проблему ... – 2008-12-05 01:02:23

ответ

2

Вы также можете переадресовать NUL в Sqlcmd:

sqlcmd -? < NUL 

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

+0

Я не ожидаю, что есть какие-то способы сделать это без изменения исходного командного файла, поэтому у нас есть победитель. (Я попытался создать `sqlcmd.bat`, который запускает sqlcmd.exe, чтобы попытаться обмануть его ... но тогда мне нужно добавить` CALL` к оригиналу. – oeuftete 2008-12-05 15:10:45

2

Я не знаю, если это поможет, но вы можете попробовать трубы что-то еще Sqlcmd, например:

echo. | sqlcmd -? 
+0

Это будет работать, но вам придется изменить командный файл. – 2008-12-05 11:57:00