Voici un fichier batch minimal, demo.bat
, pour illustrer mon problème:Comment est-ce que je peux charger l'entrée standard dans un fichier séquentiel quand une application est exécutée à partir du lot de lots avec stdin?
@ECHO off
set /p foo=Enter foo:
echo.
echo you typed "%foo%"
sqlcmd -?
set /p bar=Enter bar:
echo.
echo you typed "%bar%"
J'ai un fichier d'entrée foo.txt
qui ressemble à ceci:
foo_value bar_value
je lance mon fichier batch comme demo.bat < foo.txt
. La sortie est:
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 je retire le sqlcmd -?
, puis la barre est « tapée » comme bar_value
, qui est ce que je prévu.
Donc, il me semble que sqlcmd
ne joue pas bien avec l'entrée standard qui n'était pas faite pour ça. Quelqu'un at-il des idées brillantes sur la façon dont je peux contourner ce problème? Dans un monde parfait, la solution n'impliquerait pas de modifier le fichier de traitement par lots original , ou impliquer l'installation de packages tiers pour piloter l'interaction (par exemple, Expect).
Y a-t-il d'autres commandes ou programmes qui présentent ce comportement? Je n'ai pas sqlcmd, et je ne trouve aucun autre programme qui reproduit ce problème ... –