¿Cómo puedo alimentar la entrada estándar a un archivo por lotes cuando una aplicación se ejecuta desde lotes con stdin?
-
19-08-2019 - |
Pregunta
Aquí hay un archivo por lotes mínimo, demo.bat
, para ilustrar mi problema:
@ECHO off
set /p foo=Enter foo:
echo.
echo you typed "%foo%"
sqlcmd -?
set /p bar=Enter bar:
echo.
echo you typed "%bar%"
Tengo un archivo de entrada foo.txt
que se ve así:
foo_value bar_value
Ejecuto mi archivo por lotes como demo.bat < foo.txt
. El resultado es:
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"
Si elimino el sqlcmd -?
, la barra es " tipeó " como bar_value
, que es lo que originalmente esperaba.
Entonces, me parece que sqlcmd
no está jugando bien de alguna manera con la entrada estándar que no fue diseñada para ello. Cualquiera tiene
alguna idea brillante sobre cómo puedo solucionarlo? En un mundo perfecto, la solución no implicaría cambiar el original
archivo por lotes o implique la instalación de paquetes de terceros para impulsar la interacción (por ejemplo, Expect).
Solución
También puede redirigir NUL a sqlcmd:
sqlcmd -? < NUL
pero esto requeriría cambiar también el script por lotes.
Otros consejos
No sé si ayuda, pero puede intentar canalizar algo más a sqlcmd, por ejemplo:
echo. | sqlcmd -?