Come posso alimentare l'input standard in un file batch quando un'app viene eseguita dai muck batch con stdin?
-
19-08-2019 - |
Domanda
Ecco un file batch minimo, demo.bat
, per illustrare il mio problema:
@ECHO off
set /p foo=Enter foo:
echo.
echo you typed "%foo%"
sqlcmd -?
set /p bar=Enter bar:
echo.
echo you typed "%bar%"
Ho un file di input foo.txt
che assomiglia a questo:
foo_value bar_value
Eseguo il mio file batch come demo.bat < foo.txt
. L'output è:
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"
Se rimuovo sqlcmd -?
, la barra è " digitata " come bar_value
, che è quello che mi aspettavo inizialmente.
Quindi, mi sembra che sqlcmd
non stia giocando bene con l'input standard che non era pensato per questo. Qualcuno l'ha fatto
qualche idea brillante su come posso aggirarlo? In un mondo perfetto, la soluzione non implicherebbe la modifica dell'originale
file batch o implica l'installazione di pacchetti di terze parti per favorire l'interazione (ad esempio Expect).
Soluzione
Puoi anche reindirizzare NUL a sqlcmd:
sqlcmd -? < NUL
ma ciò richiederebbe anche la modifica dello script batch.
Altri suggerimenti
Non so se sia d'aiuto, ma puoi provare a convogliare qualcos'altro su sqlcmd, ad esempio:
echo. | sqlcmd -?