2009-04-10 9 views
3

J'ai un fichier .bat illustré ci-dessousRenvoie une valeur à partir de fichiers batch (.bat) dans un fichier texte

@echo off 
for /f "delims=" %%a in ('C:\MyProj\Sources\SearchString.vbs') do (
set ScriptOut=%%a) 
#echo Script Result = %ScriptOut% 
echo %ScriptOut% >C:\ThreePartition\Sources\myfile.txt 

Je veux que ma variable de sortie qui est scriptSortie à stocker dans un fichier texte. Quelqu'un peut-il suggérer une méthode à ajouter à mon fichier batch existant.

Merci Maddy

Répondre

2

Est-ce que je comprends bien que votre fichier est écrasé et que vous voulez il ajouté? Si oui, essayez ceci:

echo %ScriptOut% >> C:\ThreePartition\Sources\myfile.txt 

(notez le double ">>")

+0

Salut, En fait, je ne reçois pas une valeur retournée à ScriptOut (Returned frm vbs) qui devrait être écrit dans un fichier texte.Quand je lance ce code ci-dessus, je reçois juste ECHO est désactivé dans le fichier myfile.txt – Maddy

+0

Puis le La ligne blanche est votre problème, comme l'a souligné Johannes Rössel. –

+0

Je n'ai pas eu Johannes .. Quelle ligne vide pourrait être le problème.Pourquoi est-ce que je reçois ECH est éteint dans mon fichier Myfile.txt. – Maddy

2

La boucle for vous y exécute ce script et exécute la ligne tous les retours de script. Fondamentalement, cela signifie que votre variable d'environnement %ScriptOut% contient uniquement la ligne dernière de la sortie (car elle est écrasée chaque fois que la boucle traite une autre ligne). Donc, si votre script retourne

a 
b 
c 

alors %ScriptOut% ne contiendra que c. Si la dernière ligne est vide ou contient uniquement des espaces IOT supprimer efficacement %ScriptOut% ce qui est pourquoi, lorsque vous faites une

echo %ScriptOut% 

vous obtenez seulement ECHO is on. car après Substition variables tout ce qui reste, il est echo. Vous pouvez utiliser

écho.% ScriptSortie%

dans ce cas, vous allez recevoir une ligne vide (ce qui serait ce que %ScriptOut% contient à ce moment-là.

Si vous souhaitez imprimer toutes les lignes de la script renvoie à un fichier, vous pouvez le faire beaucoup plus facile en faisant simplement un

cscript C:\MyProj\Sources\SearchString.vbs > C:\ThreePartition\Sources\myfile.txt 

ou utiliser >> pour la redirection si vous voulez que la sortie soit ajoutée au fichier, comme Stanislav Kniazev pointed out.

Si vous voulez juste pour stocker la dernière ligne non vide, alors ce qui suit pourrait fonctionner:

for /f "delims=" %%a in ('C:\MyProj\Sources\SearchString.vbs') do (
    if not "%%a"=="" set ScriptOut=%%a 
) 

qui ne %ScriptOut% fixé dans le cas où la variable de la boucle est pas vide.

Questions connexes