Besoin d'aide pour finir le code....

Une difficulté, une précision posez vos questions

Modérateur : WIN32-[GG]

Répondre
Genele
Batcheur débutant
Messages : 29
Enregistré le : 21 avr. 2018 16:21

Besoin d'aide pour finir le code....

Message par Genele »

Bonjour à toutes et à tous.
Après avoir passé des heures et des heures pour faire un bat j'ai réussi à créer un code qui fonctionne presque.
Je dis presque ...
Voici le code :
@echo off
setlocal enabledelayedexpansion enableextensions
cd c:\AAAATest\Test2\*.html
set compter=0
FOR /F "tokens=* delims=<>" %%i IN ('type "c:\AAAATest\Test2\*.html" ^| find "<title>"') DO (
for %%f in (c:\AAAATest\Test2\*.html) do (
set filename=%%~nxf
)
set /A compter+=-1
set intermediaire=%%i
set modif=!intermediaire:~6,-8!
cd c:\AAAATest\Test2\
ECHO.le fichier sera renommer en : "!compter! !modif!.html"
ren !filename! "!compter! !filename! !modif!.html"

)
endlocal.
J'obtiens bien une liste avec les nouveaux noms sauf que le résultat est inversé....

Merci pour votre aide.
Cordialement
Genele
Batcheur débutant
Messages : 29
Enregistré le : 21 avr. 2018 16:21

Re: Besoin d'aide pour finir le code....

Message par Genele »

Bonjour Mcml,
Merci pour avoir pris le temps de vous pencher sur mon Code...
Effectivement, ma demande est plutôt laconique...Vous êtes bon mais pas devin.
Alors voila.
J'ai un dossier qui contient plusieurs centaines de fichiers "*.htlm"
C:\AAAATest\Test
xxxxxx001.html
xxxxxx002.html
xxxxxx003.html
xxxxxx004.html
etc.......
Ces fichiers ont tous un titre situé entre une balise <title> du genre :
<title>comment faire une gamme majeure<title>
Cette chaîne que je récupère sera incrémentée d'un numéro et va me servir à renommer le fichier en :
xxxxxx001.html devient : "1 comment faire une gamme majeure.html".
On extrait le titre et on renomme avec...dans l'ordre.
Et ainsi de suite pour chaque fichiers.
Ce qui devrait donner :
xxxxxx001.html renommer en : "1 comment faire une gamme majeure.html".
xxxxxx002.html renommer en : "2 comment faire une gamme mineure.html".
xxxxxx003.html renommer en : "3 comment faire une gamme mélodique.html".
xxxxxx004.html renommer en : "4 comment faire une gamme Harmonique.html".
Et ainsi de suite.....
Hors , le résultat et le suivant :
xxxxxx001.html renommer en : "1 comment faire une gamme Harmonique.html".
xxxxxx002.html renommer en : "2 comment faire une gamme mélodique.html".
xxxxxx003.html renommer en : "3 comment faire une gamme mineure.html".
xxxxxx004.html renommer en : "4 comment faire une gamme majeure.html".
Le problème est que le résultat est donc faux.
le code incrémente et renomme les fichiers à partir du dernier de la liste alors qu'il devrait le faire
à partir du premier.....
Voila le bug....
J'espère avoir été assez clair car ce 'est pas évident.
Merci pour votre compréhension.

Cordialement.
Genele
Batcheur débutant
Messages : 29
Enregistré le : 21 avr. 2018 16:21

Re: Besoin d'aide pour finir le code....

Message par Genele »

Bonjour,

En fait les fichiers à renommer commencent toujours par la même lettre.
Par contre lorsque je renvoie le résultat vers un fichier texte comme ceci :

set modif=!intermediaire:~6,-8!
echo !compter! !modif! >>c:\AAAATest\AAAAAzzderniereListe.txt

La liste contient bel et bien tout les noms renommés et dans le bon ordre.....J'ai même
effectuer le renommage à partir de cette liste....Mais bon.

J'ai ce code qui fonctionne parfaitement mais il faut 8 jours pour traiter tous les fichiers....

@echo off
rem Mode con cols=50 lines=25
Title HTML Renommer
rem 1 ameliorer la vitesse de traitement


@echo off
setlocal enableextensions enabledelayedexpansion
cd %~dp0
REM cd C:\AAAATest\Test\
set repert=c:\AAAATest\Test\*.html

set rep=!repert!
set compt=0
for %%G in ("c:\AAAATest\Test\*.html") do (
set/A compt+=1
echo.& echo. %%~G
Rem & echo ###

for /f "usebackq tokens=1-3 delims=<>" %%A in (%%~G) do (
(echo %%B | find "title" >nul) && (REN "%%~G" !compt!"%%~C.html")

(echo %%A | find "title" >nul) && (REN "%%~G" !compt!"%%~B.html")

Title !compt! Fichiers Traites
)
)
echo. & pause
exit /b 0

cordialement
barnabe0057
SuperBatcher
Messages : 105
Enregistré le : 24 janv. 2017 13:41

Re: Besoin d'aide pour finir le code....

Message par barnabe0057 »

Mon code est lent à cause de l'utilisation de ECHO et de FIND, en les remplaçant par des IF ça devrait être beaucoup plus rapide :

Code : Tout sélectionner

@echo off
setlocal enableextensions disabledelayedexpansion

set compt=0
for %%G in ("c:\AAAATest\Test\*.html") do (
	set/A compt+=1
	echo.& echo. %%~G

	for /f "usebackq tokens=1-3 delims=<>" %%A in (%%~G) do (
		if "%%B"=="title" (REN "%%~G" "%compt%_%%~C.html")
		if "%%A"=="title" (REN "%%~G" "%compt%_%%~B.html")
		Title %compt% Fichiers Traites
	)
)
echo. & pause
exit /b 0
Genele
Batcheur débutant
Messages : 29
Enregistré le : 21 avr. 2018 16:21

[Résolut]: Besoin d'aide pour finir le code....

Message par Genele »

Bonjour à toutes et à tous,
Merci infiniment pour votre aide.
Franchement c'est sympa d'aider le néophyte que je suis.
J'ai voulu modifier le code à cause à cause de sa lenteur.
J'ai testé le nouveau code et effectivement la vitesse du traitement a été amélioré par 100....
Comme j'avais plusieurs centaine de fichiers à renommer j'ai gagné du temps ....
Je mets ce bat de côté car il va me resservir très souvent.
M'inintéressant à la programmation en bat, j'aimerais comprendre un peu mieux comment vous en êtes arrivé
à cette solution..
Une petite explication serait la bienvenue....

Merci à tous ceux qui se sont penchés sur mon problème et surtout à Barnabé pour son
code magique.
Très cordialement.
Genele
barnabe0057
SuperBatcher
Messages : 105
Enregistré le : 24 janv. 2017 13:41

Re: Besoin d'aide pour finir le code....

Message par barnabe0057 »

Je suis content que ça marche comme tu veux.

L'explication est simple : FIND.exe est une commande externe, tout comme FINDSTR, CHOICE, PING, FORFILES, FTP et tant d'autres.
Elle ne fait pas partie nativement de CMD.exe, contrairement à IF
Genele
Batcheur débutant
Messages : 29
Enregistré le : 21 avr. 2018 16:21

Re: Besoin d'aide pour finir le code....

Message par Genele »

Bonsoir Barnabé

Merci pour votre réponse mais ce que je voulais vraiment savoir c'est pourquoi vous avez fait deux fois la commande ren ????

if "%%B"=="title" (REN "%%~G" "%compt%_%%~C.html")
if "%%A"=="title" (REN "%%~G" "%compt%_%%~B.html")
Pour le reste je constate que j'ai vraiment à apprendre.......
Finalement les bats MS-DOS et la console cmd.exe n'on plus grand chose à voir ????
Cela a vraiment évolué.
Je termine un petit bat qui regroupent un compteur de fichiers.
Une commande pour les lister et enfin votre code pour renommer à partir d'une chaîne.
Cela me permet de m'exercer et de mémoriser certaines notions.
Pour finir cela aidera peut être des néophytes comme moi de moins galérer.....

Cordialement
Genele
barnabe0057
SuperBatcher
Messages : 105
Enregistré le : 24 janv. 2017 13:41

Re: Besoin d'aide pour finir le code....

Message par barnabe0057 »

Pourquoi 2 fois la commande REN ?
==>> pour prendre en compte 2 cas de figure : soit tes codes HTML sont indentés, soit ils ne le sont pas
Genele
Batcheur débutant
Messages : 29
Enregistré le : 21 avr. 2018 16:21

Re: Besoin d'aide pour finir le code....

Message par Genele »

Bonjour,

Merci beaucoup

Cordialement
Répondre