¿Cómo puedo alimentar la entrada estándar a un archivo por lotes cuando una aplicación se ejecuta desde lotes con stdin?

StackOverflow https://stackoverflow.com/questions/342130

  •  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).

¿Fue útil?

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 -?
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top