Concatenation de chaine texte

Concatenation de chaine texte - Shell/Batch - Programmation

Marsh Posté le 20-10-2010 à 18:19:40    

Bonjour,
 
Je cherche a mettre au point un .BAT depuis 2 jours et je commence a m'arracher les cheveux...
Je m'explique :
 
J'ai un dossier qui contient un certain nombre de fichier (aléatoire, pour que ce soit plus drole...).
 
Il faut que j'arrive a recuperer la liste de ces fichier (jusque la pas de souci), mais il faut que je fasse en sorte que les noms de ces fichiers soit tous sur la meme ligne.
Et la, ca coince...
 
Je commence par faire la liste de mes fichiers avec

Code :
  1. DIR "%dossierdepart%\*.*" /ON /B > "%dirprod%\list.txt"


J'essaye ensuite de passer par une double boucle FOR /F pour concaténer les lignes les unes a la suite des autre, mais rien a faire.
 
Deja, suis-je sur le bon chemin ?
Sinon, auriez-vous une idée de comment faire ?


---------------
NULL
Reply

Marsh Posté le 20-10-2010 à 18:19:40   

Reply

Marsh Posté le 20-10-2010 à 23:09:29    

oui tu y es presque.
 
pour la boucle :  for /f %%i in ("%dirprod%\list.txt" ) @do echo %%i
 
Adapte en gras selon ce que tu veut faire exactement.


---------------
Quand on aime on ne compte pas. Quel Dilemme lorsque l'on aime compter !
Reply

Marsh Posté le 21-10-2010 à 14:27:16    

Merci pour les infos !
 
Je viens d'essayer, mais ca ne fonctionne pas.
J'ai essayer une autre méthode, mais ca ne me renvoie pas le résultat escompté... :D :
 
Dans mon fichier "list.txt", j'ai les lignes suivantes :

Code :
  1. _Logfiles
  2. aclient.cfg
  3. AClient.dat
  4. AddAdmins.log
  5. apps
  6. AUTOEXEC.BAT
  7. CONFIG.SYS
  8. Documents and Settings
  9. Intel
  10. personnel
  11. Program Files
  12. spoolerlogs
  13. temp
  14. WINDOWS


 
Ensuite, je le fait passer a travers le script suivant :

Code :
  1. FOR /f "usebackq delims=" %%a IN ("%dirprod%\list.txt" ) DO (
  2. ECHO %%a > "%dirprod%\listconc.txt"
  3.  FOR /f "usebackq delims=" %%b IN ("%dirprod%\listconc.txt" ) DO (
  4.  ECHO %%a %%b >> "%dirprod%\listconc2.txt"
  5. )
  6. )


 
Ce qui fait que dans mon fichier de sortie (listconc2.txt), je me retrouve avec ca :

Code :
  1. _Logfiles _Logfiles
  2. aclient.cfg aclient.cfg
  3. AClient.dat AClient.dat
  4. AddAdmins.log AddAdmins.log
  5. apps apps
  6. AUTOEXEC.BAT AUTOEXEC.BAT
  7. CONFIG.SYS CONFIG.SYS
  8. Documents Documents
  9. Intel Intel
  10. personnel personnel
  11. Program Program
  12. spoolerlogs spoolerlogs
  13. temp temp
  14. WINDOWS WINDOWS


Alors que ce que je voudrais obtenir, c'est un fichier avec ca :

Code :
  1. _Logfiles aclient.cfg AClient.dat AddAdmins.log apps AUTOEXEC.BAT CONFIG.SYS Documents and Settings Intel personnel Program Files spoolerlogs temp WINDOWS


 
Alors bon, je suis une buse en algo, et je n'arrive pas a trouver la bonne méthode...


---------------
NULL
Reply

Marsh Posté le 21-10-2010 à 16:00:19    

ouh là
 
tu imbriques une boucle for dans une autre et les 2 font référence à un même fichier , c'est risqué
 
S'il n'y a pas trop d'entrées dans list.txt tu peut passer par une variable
 

Code :
  1. SET STR=
  2. for /f %%i in ("%dirprod%\list.txt" ) do SET STR=%STR% %%i
  3. echo %STR%>"%dirprod%\listconc.txt"


reste juste à rajouter la gestion des noms contenant des espaces (par exemple avec delims et un caractère bidon)


---------------
Quand on aime on ne compte pas. Quel Dilemme lorsque l'on aime compter !
Reply

Marsh Posté le 21-10-2010 à 16:25:16    

Merci pour ta réponse ! :jap:
 
En fait, au moment de poster tout a l'heure, j'ai pensé a l'utilisation de la variable.
 
Je suis parti sur un script à 2 variable qui est le suivant (et qui fonctionne également) :

Code :
  1. setlocal ENABLEDELAYEDEXPANSION
  2. SET line=
  3. SET tmp=
  4. FOR /f "usebackq" %%a IN ("%dirprod%\list.txt" ) DO (
  5. SET line=!tmp!
  6. SET tmp=!line! %%a
  7. )
  8. ECHO %tmp%


 
En tout cas, un grand merci :jap: :jap: :jap:


---------------
NULL
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed