2010-06-29 5 views
0

Je souhaite imbriquer une boucle for dans un fichier de traitement par lots pour supprimer le retour chariot. Je l'ai essayé comme vous pouvez le voir ci-dessous mais ça ne marche pas.Imbrication de la boucle dans le fichier de commandes

@echo off 
setLocal EnableDelayedExpansion 

for /f "tokens=* delims= " %%a in (Listfile.txt) do (
    set /a N+=1 
    set v!N!=%%a 
) 

for /l %%i in (1, 1, %N%) do (
    echo !v%%i! 
    for /r "tokens=* delims=" %%i in (windows.cpp) do (
     echo %%i >> Linux11.cpp 
    ) 
) 
pause 

Ici, je veux vérifier avec windows.cpp. Si ça marche, j'aime changer windows .cpp avec! V %% i!

+0

La dernière syntaxe (interne) pour la syntaxe est incorrecte: le commutateur '/ r' est indiqué mais une chaîne d'option est fournie (' "tokens = * delims =" ') comme prévu si vous utilisez le commutateur'/f'. .. – aschipfl

Répondre

7

Vous ne pouvez pas faire cela dans un fichier batch. Vous n'avez aucun moyen d'adresser ou d'écrire des caractères arbitraires. Chaque outil sur Windows veille normalement à la sortie des sauts de ligne Windows (c'est-à-dire CR + LF). Certains peuvent lire Les sauts de ligne de style Unix très bien, ce qui explique pourquoi vous pouvez facilement convertir de eux. Mais à n'est pas possible. Par mesure de précaution: Les fichiers de code source contiennent souvent des lignes vierges (au moins la mienne) qui sont à des fins de lisibilité. for /f saute des lignes vides, c'est pourquoi vous mangez les fichiers pour vos lecteurs humains là-bas. S'il vous plaît ne faites pas ça. En ce qui concerne votre question: Lorsque vous imbriquez deux boucles, vous devez vous assurer qu'elles n'utilisent pas la même variable de boucle. Montrez-moi une langue où le code comme vous avez écrit fonctionne réellement.

Quelque chose comme

for /l %%i in (1, 1, %N%) do ( 
    echo !v%%i! 
    for /f "tokens=* delims=" %%l in ("!v%%i!") do ( 
    rem do whatever you want to do with the lines  ) 
) 

devrait probablement mieux travailler (vous avez manqué la parenthèse fermante finale bien). Ce qu'il faut retenir: Si vous voulez utiliser une certaine variable au lieu d'un nom de fichier fixe, il est certainement utile de remplacer ce nom de fichier par cette variable.

+0

ici dans echo %% i >> Linux11.cpp je reçois le nom du fichier, ce n'est pas copier le contenu dans ce fichier * .cpp dans Listfile.txt – user375191

+0

echo écrit juste une chaîne à l'écran ... ce qui fait vous pensez que cela ferait n'importe quoi avec le contenu d'un fichier? – Joey

+0

La dernière syntaxe (interne) 'for' est erronée: il y a le commutateur'/r' indiqué mais il y a une chaîne d'option fournie ('" tokens = * delims = "') comme si le commutateur '/ f' était donné. .. – aschipfl

1

Il serait probablement plus facile d'utiliser un convertisseur unix2dos/dos2unix pour faire cela ou un peu de saveur win32 de sed.

Questions connexes