2017-01-21 1 views

Répondre

2

Quelques solutions sont décrites par Eric Pement here. Cependant, pour les anciennes versions de cmd, l'auteur a été forcé d'utiliser des outils externes.

Par exemple, les outils de programme comme STRINGS par Douglas Boling, permet le code suivant:

echo Greetings! | STRINGS hi=ASK # puts "Greetings!" into %hi%

va de même pour ASET par Richard Breuer:

echo Greetings! | ASET hi=line # puts "Greetings!" into %hi%

L'une des alternatives pur Les solutions DOS nécessitent que la sortie du programme soit redirigée vers le fichier (nommé ANSWER.DAT dans l'exemple ci-dessous), puis utilise un fichier de commandes préparé en interne. Pour citer la page ci-dessus:

[I] n le fichier batch que nous devons être en mesure d'émettre la commande set MYVAR={the contents of ANSWER.DAT go here}. C'est une tâche difficile, puisque MS-DOS ne propose pas un moyen facile de préfixer "set MYVAR=" à un fichier [...]

Les fichiers de texte DOS et les fichiers batch normaux terminent toutes les lignes avec deux octets consécutifs: un retour chariot (Ctrl-M, hex 0D ou ASCII 13) et un saut de ligne (Ctrl-J, hex 0A ou ASCII 10). Dans le fichier batch, vous devez être en mesure d'intégrer un Ctrl-J au milieu d'une ligne.

De nombreux éditeurs de texte ont une façon de le faire: via un Ctrl-P suivi par Ctrl-J (DOS EDIT avec Win95/98, VDE), par un préfixe Ctrl-Q (Emacs, PFE), via l'entrée directe avec ALT et le pavé numérique (QEdit, Multi-Edit), ou via une touche de fonction désignée (Boxer). Les autres éditeurs ne supportent absolument pas cela (Bloc-notes, Editpad, EDIT à partir de MS-DOS 6.22 ou version antérieure, VIM peut insérer un saut de ligne uniquement en mode binaire, mais pas en mode texte normal).

Si vous pouvez le faire, votre fichier batch pourrait ressembler à ceci:

@echo off 
:: assume that the datafile exists already in ANSWER.DAT 
echo set myvar=^J | find "set" >PREFIX.DAT 
copy PREFIX.DAT+ANSWER.DAT VARIAB.BAT 
call VARIAB.BAT 
echo Success! The value of myvar is: [%myvar%]. 
:: erase temp files ... 
for %%f in (PREFIX.DAT ANSWER.DAT VARIAB.BAT) do del %%f >NUL 

Où vous voyez le^J sur la ligne 3 ci-dessus, le saut de ligne doit être incorporés à ce moment-là. Votre éditeur peut l'afficher comme une boîte carrée avec un cercle intégré.