2008-12-04 2 views
3

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

+0

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 ... –

Répondre

2

Vous pouvez également rediriger NUL à sqlcmd:

sqlcmd -? < NUL 

mais cela nécessiterait également de changer le script batch.

+0

Je ne pense pas qu'il existe des moyens de le faire sans changer le fichier batch d'origine, donc nous avons un gagnant. (J'ai essayé de créer un 'sqlcmd.bat' qui exécute sqlcmd.exe pour essayer de le tromper ... mais j'aurais besoin d'ajouter' CALL' à l'original. – oeuftete

2

Je ne sais pas si ça aide, mais vous pouvez essayer de tuyau quelque chose d'autre à sqlcmd, par exemple:

echo. | sqlcmd -? 
+0

Cela fonctionnera, mais vous devrez changer le fichier séquentiel. –

Questions connexes