Page 1 sur 1

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

Posté : 27 mai 2018 21:51
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

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

Posté : 28 mai 2018 12:03
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.

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

Posté : 28 mai 2018 20:25
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

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

Posté : 28 mai 2018 20:43
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

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

Posté : 29 mai 2018 12:12
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

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

Posté : 29 mai 2018 23:00
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

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

Posté : 30 mai 2018 00:39
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

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

Posté : 30 mai 2018 06:48
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

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

Posté : 30 mai 2018 20:52
par Genele
Bonjour,

Merci beaucoup

Cordialement