DOS : Ecrire en fin de ligne

Fermé
tibo830 - 28 juil. 2008 à 17:31
 tibo830 - 4 août 2008 à 15:02
Bonjour,

J'ai un petit problème sous DOS. Je dois éditer par script un fichier CSV.
La première colonne est déja remplie correctement. J'ai maintenant besoin d'éditer les colonnes suivantes à partir de données que contient un fichier texte.

Je cherche une solution pour écrire dans les colonnes 2 et 3 sans toucher à la colonne 1.
J'ai cherché sans succès à écrire en fin de ligne.

J'ai ensuite tenté d'éditer les trois colonnes d'un coup avec deux boucles FOR imbriquées :

FOR /F "tokens=1,3 delims= " %%c in ('findstr "fichiers" %REP_LOG% ^| findstr "octets" %REP_LOG%') DO (
FOR /F "tokens=1 delims= " %%e in ('findstr universe %TEMP_LOG%') do echo %%e;%%c;%%d >> %FICH%)

Les variables REP_LOG et TEMP_LOG sont mes fichiers texte et la variable FICH est mon CSV. Cette solution n'est toujours pas la bonne.
Je ne pas pas écrire ce script avec un autre langage (dommage) et je ne peux pas installer de commandes supplémentaires (sed ...).

Je vous remercie d'avance pour votre aide.

Tibo.

3 réponses

Cyclic-3 Messages postés 125 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 15 mai 2009 11
28 juil. 2008 à 18:35
Bonjour,

J'ai beaucoup fait de trucs comme toi en DOS, mais donne moi des exemples:
-quel textes tu as dans REP_LOG et TEMP_LOG ?
-dans le CSV, n'y a t-il qu'une seule colonne enregistrée, ou plusieurs mais tu ré-écris les deuxième et troisième ?

Dans ton script,il me semble qu'il manque les valeurs de delims, mais je peux me tromper.

Connais tu ce site avec un tuto super sur le batch ? http://astase.com/
0
Bonjour,

Le fichier rep_log contient un DIR de tout les répertoire "log" d'un serveur. voilà un échantillon :

R‚pertoire de d:\universe\MOND01\X\PEG\log

02/07/2006 12:08 <DIR> .
02/07/2006 12:08 <DIR> ..
22/07/2008 21:00 6ÿ235 log.txt
22/07/2008 21:00 156 PEG60-17.ftp
2 fichier(s) 6ÿ391 octets
2 R‚p(s) 81ÿ701ÿ199ÿ872 octets libres
Le volume dans le lecteur D s'appelle Data
Le num‚ro de s‚rie du volume est F864-96D4

R‚pertoire de d:\universe\MOND01\X\RFP\log

28/07/2005 14:20 <DIR> .
28/07/2005 14:20 <DIR> ..
0 fichier(s) 0 octets
2 R‚p(s) 81ÿ701ÿ199ÿ872 octets libres
Le volume dans le lecteur D s'appelle Data
Le num‚ro de s‚rie du volume est F864-96D4


Dans ce fichier, je récupère le nombre de fichiers pour la colonne 2 et la taille pour la colonne 3.


Le fichier TEMP_LOG contient la liste des répertoires log du serveur :

" "
d:\universe\MOND01\X\CFG\log
d:\universe\MOND01\X\CPT\log
d:\universe\MOND01\X\CRO\log
d:\universe\MOND01\X\DBF\log
d:\universe\MOND01\X\IFU\log
d:\universe\MOND01\X\IU_\log
d:\universe\MOND01\X\KIO\log
d:\universe\MOND01\X\LCV\log
d:\universe\MOND01\X\OPI\log
d:\universe\MOND01\X\PDF\log
d:\universe\MOND01\X\PEG\log
d:\universe\MOND01\X\RFP\log
d:\universe\MOND01\X\SYC\log
d:\universe\MOND01\X\TEC\log


Cette liste doit se retrouver en colonne 1 (sauf la première ligne vide).

Merci pour ton aide.
0
Cyclic-3 Messages postés 125 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 15 mai 2009 11
1 août 2008 à 17:35
Suite, si tu me lis toujours ...

J'ai déjà obtenu un résultat avec ça:

findstr "fichier(s)" REP_LOG >REP.TXT
findstr /N "fichier(s)" REP.TXT >REP2.TXT
findstr "universe" TEMP_LOG >TMP.TXT
findstr /N "universe" TMP.TXT >TMP2.TXT
For /L %%a in (1,1,2) Do (
Findstr "%%a:" REP2.TXT >REP3.txt
Findstr "%%a:" TMP2.TXT >TMP3.TXT
For /F "tokens=2 delims=:" %%b in (REP3.TXT) Do Echo %%b >VAL1.txt
Copy SET1+VAL1.txt SET1.BAT
Call SET1.BAT
For /F "tokens=2,3 delims=:" %%b in (TMP3.TXT) Do Echo %%c>VAL2.txt
Copy SET2+VAL2.txt SET2.BAT
Call SET2.BAT
Set
Echo %VAL1; %VAL2
pause)


Cela correspond à ce que je te disais précédemment:
J'extrait seulement les lignes nécessaires et dans un 2° temps je les numérote;
ensuite, la boucle FOR permet d'otenir dans chaque fichier les lignes correspondantes, puis de récupérer seulement ce qui t'intéresse en laissant de coté les numéros.

Jusque là ça va, mais l'instruction SET qui me rendrait service ne fonctionne pas bien dans la boucle ?
Alors j'ai créé deux fichiers SET1 et SET2 qui comportent l'instruction "SET VALx= " mais SANS retour chariot; une astuce qui permet de récupérer quand même les valeurs en VAL1 et VAL2, ce que je vérifie avec SET (tout court)

Après ça se corse, car l'Echo %VAL1% %VAL2% ne marche pas ????

Déjà si ça peux t'aider !

Cordialement

P.S.: au fait, ton DOS c'est quoi, WinNT ou Windows XP ou autre chose ?
0
tibo830 > Cyclic-3 Messages postés 125 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 15 mai 2009
4 août 2008 à 15:02
Bonjour,

Merci pour ton aide. J'ai finit par trouver la solution en imbriquant deux boucles.
0
Cyclic-3 Messages postés 125 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 15 mai 2009 11
31 juil. 2008 à 17:56
Bonjour Tibo,

et désolé pour ce laps de temps passé, mais j'ai des contraintes, malgré ma retraite.

J'ai vu plusieurs problèmes dans ta syntaxe :
- dans la premiére ligne, SEUL le premier FINDSTR est utile, si tu ne cherche QUE les lignes contenant "fichier(s)",
et DE PLUS c'est bien "fichier(s)" et non "fichiers" qu'il faut chercher.
- tes guillemets simples sont-ils bien en réalité des guillements inversés, car c'est le résultat du Findstr que tu analyse, n'est-ce pas ?
- dans la deuxième ligne, >>universe<< N'EST PAS entre guillemets ?
- Si tu imbrique tes FOR, tu écris les même valeurs de %c% et %d de la première boucle dans la boucle du deuxième FOR ?

Je cherche un autre moyen : par exemple, faire un fichier temporaire de ligne "NUMEROTEES" avec "fichier(s)", et il DOIT y en avoir autant que de lignes avec ...\log, n'est-ce pas ?
faire AUSSI un fichier temporaire à partir du TEMP_LOG, pareil, en numérotant les lignes contenant "universe"
ENSUITE tu imbrique tes deux FOR qui lisent les valeurs ET les numéros et quand le numéro de la première boucle correspond à la deuxième, tu ecris les valeurs des variables qui t'intéressent.

Cordialement.
0