2010-07-06 11 views
0

Je sais que cela a été demandé 100 fois avant, mais chaque bit de code que j'essaie ne semble pas fonctionner. Je suis en train de compiler un fichier, puis vérifier un fichier d'erreur et le lire ligne par ligne et le jeter dans la ligne de commande:Lecture de lignes à partir d'un fichier texte dans un fichier batch

C'est ce que j'ai jusqu'à présent:

Set var1= %1 
Set var2= %var1:.mb=.ERR% 

echo %var1% 
echo %var2% 

"C:\Program Files\MapInfo\MapBasic\mapbasic.exe" -D %var1% 

FOR /f "delims=" %%a in (%var2%) do echo %%a 

Je prends le chemin vers le fichier en tant que ligne de commande arg cela fonctionne très bien, puis en supprimant le .mb et en le remplaçant par .ERR et en exécutant le programme pour remplir le fichier .mb, tout fonctionne bien jusqu'à ce que je frappe la boucle for.

Le résultat de boucle ressemble à ceci, lors de l'exécution avec écho sur:

FOR /F "delims=" %a in ("C:\Documents and Settings\woodrown\My Documents\Visual Studio 2008\Projects\MapInfoInteropTemplate1\MapInfoInteropTemplate1.ERR") do echo %a 

mais quand il court juste imprime "C:\Documents and Settings\woodrown\My Documents\Visual Studio 2008\Projects\MapInfoInteropTemplate1\MapInfoInteropTemplate1.ERR" pas le contenu des fichiers.

Je peux le faire fonctionner si je lui donne un nom dur et aucun chemin avec des espaces, tels que 'MapInfoInteropTemplate1.ERR' mais je veux qu'il utilise %var2% pour le nom de fichier à lire.

Si je mets ' autour du chemin, il lance juste mon éditeur de texte par défaut.

J'ai fini par ignorer toute la génération de fichiers par lots de la programmation informatique, donc c'est vraiment étrange pour moi, désolé si c'est une question basique.

+0

Obtenez Python. (http://www.python.org/) –

+1

Je dois utiliser un fichier batch parce que j'utilise ceci avec des outils externes de Visual Studio, croyez-moi si je n'avais pas besoin d'utiliser des fichiers batch. –

+0

Comment Visual Studio vous limite-t-il aux fichiers de traitement par lots? – reinierpost

Répondre

3

Utilisez l'option usebackq-for:

FOR /F "usebackq delims=" %%a in ("C:\Documents and Settings\woodrown\My Documents\Visual Studio 2008\Projects\MapInfoInteropTemplate1\MapInfoInteropTemplate1.ERR") do echo %%a 

Sinon, il interprétera tout ce que vous mettez entre double-quoets comme une chaîne à tokenizer, non pas comme un fichier à lire. Cela est également indiqué dans l'aide:

or, if usebackq option present: 

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters] 
FOR /F ["options"] %variable IN ('string') DO command [command-parameters] 
FOR /F ["options"] %variable IN (`command`) DO command [command-parameters] 
+0

Merci, fonctionne un charme. –

Questions connexes