(Boucle FOR) manque une opérande =>BATCH

Résolu/Fermé
Flo313Z Messages postés 119 Date d'inscription jeudi 14 février 2013 Statut Membre Dernière intervention 16 avril 2018 - 17 mars 2013 à 12:31
Flo313Z Messages postés 119 Date d'inscription jeudi 14 février 2013 Statut Membre Dernière intervention 16 avril 2018 - 22 mars 2013 à 10:45
Bonjour,


vous j'ai un petit souci, comme le dit si bien le titre il me manque une opérande dans ma boucle for. je suis vraiment mauvais en batch alors si quelque qu'un pourrai m'expliquer ça serait vraiment sympas :)

voilà la bête !!
@ echo off
set /p titre=Titre des fichiers a renommer :
set /p extension=Extension des fichiers a renommer :

for %%a in (*.%extension%) do set /A nombre+
set /A compteur=1
for /l %%b in (1,%compteur%,%nombre%) do ( ren ".\*.%extension%" "%titre% - (%compteur%).%extension%")
echo %nombre% de fichier(s) avec extension .%extension% dans le dossier
pause
A voir également:

6 réponses

dg_belmontet Messages postés 313 Date d'inscription mercredi 30 mars 2011 Statut Membre Dernière intervention 8 juin 2016 127
17 mars 2013 à 17:47
Bonsoir,

Avec cette syntaxe votre code ne peut pas fonctionner car la variable %compteur% n'est jamais incrémentée et bien d'autres choses...
Je suppose qu'à partir d'un répertoire donné, et en fonction des saisies, on renomme tous les fichiers du répertoire avec l'extension saisie et renommé avec le nom saisi aussi. En fait il auront tous le même nom mais indicé avec un numéro incrémental pour les distinguer.

Voici un exemple de code (qui fonctionne chez moi) :


@echo off

:Init
set /A nombre=0
setlocal enableDelayedExpansion
set /p titre=Titre des fichiers a renommer ?
set /p extension=Extension des fichiers a renommer ?

:Boucle
for %%a in (*.%extension%) do (
set /A nombre=!nombre!+1
ren %%a "%titre%-(!nombre!).%extension%"
)

:Synthese
echo.
echo Il y a eu %nombre% fichier(s) renomme(s) avec l'extension ".%extension%" dans le dossier en cours...
echo.
echo.
pause

Exit


***************************************************

Le setlocal enableDelayedExpansion est indispensable pour "manipuler" une variable dans une boucle sinon la variable %compteur% ne pourra pas s'incrémenter. La syntaxe d'une variable qui est modifiée dans une boucle est sous la forme !variable! (donc entre deux !).

De plus il faudra gérer le répertoire où seront situés les fichiers à renommer car dans votre code on n'analyse seulement que les fichiers situés dans le même répertoire où est situé votre batch.cmd (donc répertoire en cours...).

Voilà, j'espère que cela répond à vos attentes...

Cordialement.
0
Flo313Z Messages postés 119 Date d'inscription jeudi 14 février 2013 Statut Membre Dernière intervention 16 avril 2018 6
18 mars 2013 à 00:08
En effet sa marche du tonnerre. Merci beaucoup :)
Ceci dit j'ai encore une question.
je ne comprend pas cette syntaxe : a%%
A quoi sert elle ?
%extension% pas de problème (variable standard)
!extension! a la limite (variable dans une boucle)
mais celle-là a%% ??
0
dg_belmontet Messages postés 313 Date d'inscription mercredi 30 mars 2011 Statut Membre Dernière intervention 8 juin 2016 127
18 mars 2013 à 08:36
Bonjour,

%%a (ou toute autre lettre comme par exemple %%k) est une variable de la boucle FOR qui contiendra au fur et à mesure de l'analyse de la boucle ce qui est défini dans l'opérande mis entre-parenthèses, donc ici dans %%a on retrouvera le 1er fichier avec l'extension définie dans la saisie et mis dans la variable %extension%.

Si vous lancez une boucle FOR "DIRECTEMENT" en mode commande, c'est à dire dans une fenêtre DOS, la syntaxe est %a et si vous lancez une boucle dans un batch (.cmd ou .bat) la syntaxe est %%a (pas facile à comprendre....).

Pour vous aider, vous avez la syntaxe en saisissant dans une fenêtre DOS : FOR /?
Cette boucle est très puissante quand on comprend bien la syntaxe affichée (mais pas facile tout de même....). D'ailleurs pour chaque commende Batch, on peut avoir l'aide avec : Commande /?

Pour !extension! comme je vous l'ai dit, c'est la syntaxe d'une variable qui est modifiée dans une boucle, mais si on met %extension%, elle ne sera pas incrémentée de +1 lorsqu'on trouve un fichier avec l'extension requise.

Bonne journée.

PS: le batch c'est passionnant.....
0
Flo313Z Messages postés 119 Date d'inscription jeudi 14 février 2013 Statut Membre Dernière intervention 16 avril 2018 6
18 mars 2013 à 19:04
Désoler de t'embêter encore avec mes problèmes .bat mais ça fonctionne plus (je pense que ça vient encore de la boucle for) mais vu que c'est la même que la tienne...
ou bien les parenthèses ")" des
) ELSE (
des menu de mon code (je vois pas comment les fermer).

Voilà le nouveau code de RenommeMan.bat
@ECHO off
:MENU
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO                             Renommage Automatique
ECHO                             \ Creer par Flo313Z /
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO.
ECHO 1 - Renommer le Dossier Actuel
ECHO 2 - Renommer le Dossier Cible
ECHO 0 - Exit
ECHO.

SET /p menu1=Que voulez-vous faire : 
	IF %menu1%==1 GOTO DOSSIER_ACTUEL
	IF %menu1%==2 GOTO DOSSIER_CIBLE
	IF %menu1%==0 GOTO EXIT 
	) ELSE (
		CLS
		GOTO MENU )

:EXIT
EXIT

:DOSSIER_ACTUEL
CLS
SET currentpath=%~dp0
CD %currentpath%
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO                             Renommage Automatique
ECHO                             \ Creer par Flo313Z /
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO.
ECHO 1 - (*.xxx) - Renommer Titre
ECHO 2 - (xxx.*) - Renommer Extension
ECHO 3 -  (*.*)  - Renommer Titre et Extension
ECHO 8 - Trier par...
ECHO 9 - Fichier a exclure
ECHO 0 - Retour
ECHO.

SET /p dossier_actuel=Que voulez-vous faire : 
	IF %dossier_actuel%==1 GOTO INIT
	REM IF %dossier_actuel%==2 GOTO 
	REM IF %dossier_actuel%==3 GOTO 
	IF %dossier_actuel%==8 GOTO TRIER
	IF %dossier_actuel%==9 GOTO EXCLUSION_FICHIER_1
	IF %dossier_actuel%==0 GOTO MENU
	) ELSE (
		CLS
		GOTO DOSSIER_ACTUEL )

:DOSSIER_CIBLE
CLS
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO                             Renommage Automatique
ECHO                             \ Creer par Flo313Z /
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO.
ECHO Chemin d'acces du fichier a renommer sans "guillemets"
SET /p Chemin_dossier_cible= : 
CD "%Chemin_dossier_cible%"
CLS
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO                             Renommage Automatique
ECHO                             \ Creer par Flo313Z /
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO.
ECHO 1 - (*.xxx) - Renommer Titre
ECHO 2 - (xxx.*) - Renommer Extension
ECHO 3 -  (*.*)  - Renommer Titre et Extension
ECHO 0 - Retour
ECHO.

SET /p dossier_cible=Que voulez-vous faire : 
	IF %dossier_cible%==1 GOTO INIT
	REM IF %dossier_cible%==2 GOTO 
	REM IF %dossier_cible%==3 GOTO 
	IF %dossier_cible%==8 GOTO TRIER
	IF %dossier_cible%==9 GOTO EXCLUSION_FICHIER_1
	IF %dossier_cible%==0 GOTO MENU
	) ELSE (
		CLS
		GOTO DOSSIER_CIBLE )

:TRIER
CLS
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO                             Renommage Automatique
ECHO                             \ Creer par Flo313Z /
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO.
ECHO 1 - Nom
ECHO 2 - Extension
ECHO 3 - Taille
ECHO 0 - Retour
ECHO.

SET /p trier=Trier par : 
	IF %trier%==1 GOTO TRIER_NOM
	IF %trier%==2 GOTO TRIER_EXTENSION
	IF %trier%==3 GOTO TRIER_TAILLE
	IF %trier%==0 GOTO MENU
	) ELSE (
		CLS
		GOTO TRIER )
:TRIER_NOM
CLS
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO                             Renommage Automatique
ECHO                             \ Creer par Flo313Z /
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO.
DIR ".\*.*" /B /D /O N
PAUSE
CLS
GOTO TRIER
:TRIER_EXTENSION
CLS
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO                             Renommage Automatique
ECHO                             \ Creer par Flo313Z /
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO.
DIR ".\*.*" /B /D /O E
PAUSE
CLS
GOTO TRIER
:TRIER_TAILLE
CLS
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO                             Renommage Automatique
ECHO                             \ Creer par Flo313Z /
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO.
DIR ".\*.*" /B /D /O S
PAUSE
CLS
GOTO TRIER

:EXCLUSION_FICHIER_1
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO                             Renommage Automatique
ECHO                             \ Creer par Flo313Z /
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO.
IF NOT EXIST "%USERPROFILE%\Desktop\EXCLUDE.txt" GOTO EXCLUSION_FICHIER_2
) ELSE (
GOTO EXCLUSION_FICHIER_3 )
:EXCLUSION_FICHIER_2
IF NOT EXIST "%USERPROFILE%\Desktop\EXCLUDE.txt" ECHO RenommeMan.bat > "%USERPROFILE%\Desktop\EXCLUDE.txt"
) ELSE (
	ECHO Fichier du dossier a exclure "exemple.txt"
	SET /p exclude_fichier= : 
	ECHO %exclude_fichier% >> "%USERPROFILE%\Desktop\EXCLUDE.txt"
	ATTRIB +H ".\%exclude_fichier%"
	CLS
	GOTO EXCLUSION_FICHIER_1 )
:EXCLUSION_FICHIER_3
ECHO Voulez-vous exclure un/des fichier(s) avant de renommer (y/n)
SET /p exclusion_fichier=Exemple "X.X" : 
	IF %exclusion_fichier%==y GOTO EXCLUSION_FICHIER_2
	IF %exclusion_fichier%==Y GOTO EXCLUSION_FICHIER_2
REM probleme redirection
	REM IF %exclusion_fichier%==n GOTO 
	REM IF %exclusion_fichier%==N GOTO 
	) ELSE (
		CLS
		GOTO EXCLUSION_FICHIER )

:INIT
CLS
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO                             Renommer Automatique
ECHO                             \ Creer par Flo313Z /
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO.
SET /A nombre=0
setlocal enableDelayedExpansion
ECHO Titre des fichiers a renommer :
SET /p titre= : 
ECHO Extension des fichiers a renommer :
SET /p extension= : 
GOTO BOUCLE_FOR_REM
:BOUCLE_FOR_REM
for %%i IN (*.%extension%) DO (
	SET /A nombre=!nombre!+1
	REN %%i "%titre%-!nombre!.%extension%" 
)
GOTO FICHIER_EXCLUDE
:FICHIER_EXCLUDE
IF NOT EXIST "%USERPROFILE%\Desktop\EXCLUDE.txt" GOTO SYNTHESE
) ELSE (
ECHO FICHIER EXCLUE :
FOR /f "delims=" %%v IN (%USERPROFILE%\Desktop\EXCLUDE.txt) DO (
	ATTRIB -H %%v
	ECHO %%v n'a pas ete renommer !)
	GOTO SYNTHESE
)
:SYNTHESE
ECHO.
ECHO Il y a eu %nombre% fichier(s) renomme(s) %titre% avec l'extension ".%extension%" dans le dossier en cours...
GOTO MENU


Ce qui du problème Citation :
De plus il faudra gérer le répertoire où seront situés les fichiers à renommer car dans votre code on n'analyse seulement que les fichiers situés dans le même répertoire où est situé votre batch.cmd (donc répertoire en cours...).

pour exclure les fichiers que je ne voulez pas renommer j'ai trouvé ca :
ATTRIB +H %%v

ce qui rend le fichier invisible et une fois que la boucle FOR et terminé je remet en normal :
ATTRIB -H %%v

et voilà
0
dg_belmontet Messages postés 313 Date d'inscription mercredi 30 mars 2011 Statut Membre Dernière intervention 8 juin 2016 127
19 mars 2013 à 16:19
Bonjour,

Oh Oh...!!!!, il y a beaucoup à faire et il y a beaucoup d'erreurs de syntaxe et de logique dans le séquencement.
Tout d'abord, un batch s'écrit au fur et à mesure, on commence petit puis on l'augmente au fil de l'eau après de nombreux tests et ceci pour chaque ajout mais JAMAIS tout d'un coup comme vous avez fait dans cette 2ème phase.... Déjà, il faut comprendre la logique de ce que vous voulez obtenir et je n'ai pas l'énoncée du problème soumis.
Quant à la syntaxe, pour ce qui est des parenthèses, il doit y en avoir une d'ouverte puis après une de fermée. Pour ELSE vous mettez: ) ELSE (.....) et pour celle fermée devant ELSE il n'y en a pas d'ouverte.

J'ai essayé de comprendre votre code et je l'ai modifié comme suit, MAIS il est à compléter. Ce qui fonctionne : le répertoire actuel, avec une ou plusieurs exclusions et enfin le renommage des fichiers. Le tri ne fonctionne pas sauf pour le nom, je pense que c'est un bug Microsoft, en effet le tri pour les extensions et la taille des fichiers est complètement incohérent pourtant c'est bien codé....

@ECHO off

:MENU
Cls
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO Renommage Automatique
ECHO \ Creer par Flo313Z /
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO.
ECHO 1 - Renommer les fichiers du Dossier Actuel
ECHO 2 - Renommer les fichiers d'un Dossier Cible
ECHO 0 - Exit
ECHO.

SET /p menu1=Que voulez-vous faire :
IF %menu1%==1 GOTO DOSSIER_ACTUEL
IF %menu1%==2 GOTO DOSSIER_CIBLE
IF %menu1%==0 GOTO EXIT
ELSE (
Goto MENU
)


:DOSSIER_ACTUEL
CLS
Rem SET currentpath=%~dp0 cela ne sert à rien puisque c'est le répertoire déjà en cours donc
Rem CD %currentpath% celui où vous lancez le Batch.
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO Renommage Automatique
ECHO \ Creer par Flo313Z /
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO.
ECHO 1 - (*.xxx) - Renommer Titre
rem ECHO 2 - (xxx.*) - Renommer Extension
rem ECHO 3 - (*.*) - Renommer Titre et Extension
ECHO 8 - Trier par...
ECHO 9 - Fichier a exclure
ECHO 0 - Retour
ECHO.

SET /p dossier_actuel=Que voulez-vous faire ?
IF %dossier_actuel%==1 GOTO INIT
REM IF %dossier_actuel%==2 GOTO xxxx
REM IF %dossier_actuel%==3 GOTO yyyy
IF %dossier_actuel%==8 GOTO TRIER
IF %dossier_actuel%==9 GOTO EXCLUSION_FICHIER_1
IF %dossier_actuel%==0 GOTO MENU
ELSE (
GOTO DOSSIER_ACTUEL
)

:DOSSIER_CIBLE
CLS
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO Renommage Automatique
ECHO \ Creer par Flo313Z /
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO.
ECHO Chemin absolu d'acces aux fichiers a renommer sans "guillemets" (ex: \rep1\images)
SET /p Chemin_dossier_cible= :
CD "%Chemin_dossier_cible%"
CLS
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO Renommage Automatique
ECHO \ Creer par Flo313Z /
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO.
ECHO 1 - (*.xxx) - Renommer Titre
ECHO 2 - (xxx.*) - Renommer Extension
ECHO 3 - (*.*) - Renommer Titre et Extension
ECHO 0 - Retour
ECHO.

SET /p dossier_cible=Que voulez-vous faire :
IF %dossier_cible%==1 GOTO INIT
REM IF %dossier_cible%==2 GOTO
REM IF %dossier_cible%==3 GOTO
IF %dossier_cible%==8 GOTO TRIER
IF %dossier_cible%==9 GOTO EXCLUSION_FICHIER_1
IF %dossier_cible%==0 GOTO MENU
ELSE (
GOTO DOSSIER_CIBLE
)

:TRIER
CLS
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO Renommage Automatique
ECHO \ Creer par Flo313Z /
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO.
ECHO 1 - Nom
ECHO 2 - Extension
ECHO 3 - Taille
ECHO 0 - Retour
ECHO.

SET /p trier=Trier par :
IF %trier%==1 GOTO TRIER_NOM
IF %trier%==2 GOTO TRIER_EXTENSION
IF %trier%==3 GOTO TRIER_TAILLE
IF %trier%==0 GOTO MENU
ELSE (
GOTO TRIER
)

:TRIER_NOM
CLS
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO Renommage Automatique
ECHO \ Creer par Flo313Z /
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO.
DIR ".\*.*" /B /D /O N
Echo.
PAUSE
GOTO TRIER

:TRIER_EXTENSION
CLS
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO Renommage Automatique
ECHO \ Creer par Flo313Z /
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO.
DIR ".\*.*" /B /D /O E
PAUSE
GOTO TRIER

:TRIER_TAILLE
CLS
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO Renommage Automatique
ECHO \ Creer par Flo313Z /
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO.
DIR ".\*.*" /B /D /O S
PAUSE
GOTO TRIER

:EXCLUSION_FICHIER_1
Cls
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO Renommage Automatique
ECHO \ Creer par Flo313Z /
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO.
IF NOT EXIST "%USERPROFILE%\Desktop\EXCLUDE.flg" GOTO EXCLUSION_FICHIER_2
GOTO EXCLUSION_FICHIER_3


:EXCLUSION_FICHIER_2
IF NOT EXIST "%USERPROFILE%\Desktop\EXCLUDE.flg" ECHO Flo313z> "%USERPROFILE%\Desktop\EXCLUDE.flg"
ECHO Fichier du dossier a exclure "exemple.txt"
SET /p exclude_fichier= :
ECHO %exclude_fichier% >> "%USERPROFILE%\Desktop\EXCLUDE.flg"
ATTRIB +H ".\%exclude_fichier%"


:EXCLUSION_FICHIER_3
Cls
Echo.
ECHO Voulez-vous encore exclure un des fichiers avant de renommer (y/n)
SET /p exclusion_fichier= :
IF /I %exclusion_fichier%==y GOTO EXCLUSION_FICHIER_2
IF /I %exclusion_fichier%==n GOTO INIT
GOTO EXCLUSION_FICHIER_3


:INIT
CLS
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO Renommer Automatique
ECHO \ Creer par Flo313Z /
ECHO.
ECHO --------------------------------------------------------------------------------
ECHO.
setlocal enableDelayedExpansion
SET /A nombre=0
ECHO Titre des fichiers a renommer :
SET /p titre= :
ECHO Extension des fichiers a renommer :
SET /p extension= :

:BOUCLE_RENOMMAGE
For %%i IN (*.%extension%) DO (
SET /A nombre=!nombre!+1
REN %%i "%titre%-!nombre!.%extension%"
)

:SYNTHESE
ECHO.
ECHO Il y a eu %nombre% fichier(s) renomme(s) %titre% avec l'extension ".%extension%" dans le dossier...
Echo.
Echo.
IF NOT EXIST "%USERPROFILE%\Desktop\EXCLUDE.flg" GOTO PAUSE
ECHO Fichier(s) Exclu(s) :
FOR /f "delims=" %%v IN (%USERPROFILE%\Desktop\EXCLUDE.flg) DO (
ATTRIB -H %%v > nul
If not "%%v"=="Flo313z" ECHO %%v n'a pas ete renomme...!!
)
:PAUSE
Echo.
Pause
GOTO MENU

:EXIT
If exist %USERPROFILE%\Desktop\EXCLUDE.flg del %USERPROFILE%\Desktop\EXCLUDE.flg > nul
ENDLOCAL
EXIT

************************************

Pour ce qui est du dossier CIBLE, ce que vous avez fait est valable uniquement si vous restez sur la même unité de disque sinon si on change de disque cela ne fonctionne pas. De plus si le batch est lancé par exemple dans C:\Batch et que je veux exclure puis renommer des fichiers dans C:\Fic\images votre code ne fonctionne pas..... donc à modifier et c'est un bon exercice....

Il y a aussi des fonctions proposées dans des menus qui sont à compléter et il vous reste encore pas mal de tests à faire.

Cdlt.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Flo313Z Messages postés 119 Date d'inscription jeudi 14 février 2013 Statut Membre Dernière intervention 16 avril 2018 6
Modifié par Flo313Z le 20/03/2013 à 20:44
Désolé, c'est vrai que sur le moment c'était claire comme de l'eau de roche (vu que c'est moi qui est codé) mais le lendemain c'est toute suite moins évident. alors quand c'est code de quelqu'un autre...
A partir de maintenant je commenterai toute les parties de mon code comme ca sa sera plus simple pour tous (moi i compris:)

bien vu pour le choix du lecteur ;)
 CD /D "%chemin_cible%" 


ce qui est de la command "DIR" je ne comprenais pas pourquoi c'etait toujours trié par nom (merci mais du coup ca sert a rien...dommage)

ce qui est des "else" je toujours vu ")else(" en cmd alors je me suis dit que c'était la syntaxe propre au batch (mais en fait ce n'est pas tellement diferents des autre laguages de programmation)
exemple en batch
if condition (...) else (...) 
<code> 
if condition 
(...) 
else 
(...) 

exemple en php
if (condition) {...} else {...} 

if (condition) 
{...} 
else 
{...} 

ce qui est de :
Rem SET currentpath=%~dp0 cela ne sert à rien puisque c'est le répertoire déjà en cours donc  
Rem CD %currentpath% celui où vous lancez le Batch. 

si l'on choisis le dossier cible (1er menu) et une fois terminé on voulez choisir le répertoire par défaut (menu 1 également) ca devient utile !

je comprend pas pourquoi tu a modifié le fichier "EXCLUDE.txt" par "EXCLUDE.flg" ?
c'est quoi la difference ?

mais mon plus gros souci c'est la boucle de renommage. nombre ne incrémente pas !
setlocal enableDelayedExpansion  
For %%i IN (*.%extension%) DO (  
SET /A nombre=!nombre!+1 
echo %nombre% 
REM pause 
REM REN %%i "%titre%!nombre!.%extension%"  
echo %%i 
pause 

j'ai essayé comme ca :
setlocal enableDelayedExpansion  
For %%i IN (*.%extension%) DO (  
SET /A nombre+=1 
echo %nombre% 
REM pause 
REM REN %%i "%titre%!nombre!.%extension%"  
echo %%i 
pause 

ca donne pas plus de resultat
alors si ta une idee elle est la bienvenue
0
dg_belmontet Messages postés 313 Date d'inscription mercredi 30 mars 2011 Statut Membre Dernière intervention 8 juin 2016 127
Modifié par dg_belmontet le 21/03/2013 à 00:19
Bonsoir,

Ok vous avez bien vu que la commande de tri de fonctionne pas (DIR ne semble fonctionner que pour le tri sur les noms)

Pour ce qui est du répertoire courant "currentpath" je l'avais mis en commentaire car nulle part après il était utilisé donc il ne servait à rien dans votre code. Mais effectivement il est bon de l'enregistrer pour pouvoir revenir par la suite dedans si on change de path pour un traitement quelconque. D'ailleurs pour avoir le path courant il y a : %~dp0 mais aussi %cd%

Concernant la parenthèse fermée avant le ELSE C.a.d ) ELSE(....) OK mais il faut avant qu'il y ait une parenthèse ouverte ( ce qu'il n'y a pas dans votre code du message précédent.

En règle générale, mettre un maximum de REM pour expliquer une fonction, un menu ou un traitement (c'est important pour les diagnostics, debug et les évolutions par la suite et surtout pour les autres...

Si j'ai changé EXCLUDE.txt en EXCLUDE.flg c'est que j'avais 5 fichiers *.txt à renommer ou/et exclure pour mes tests, le tout dans un même répertoire et de ce fait le fichier EXCLUDE.txt était renommé dans la boucle FOR (aussi ras le bol...).

De plus, pour créer ce fichier EXCLUDE.txt j'ai changé la chaîne qui le crée (mis Flo313z) car en mettant le nom du batch je me retrouve avec un Attrib +H sur le batch même si on met en exclusion *.txt par exemple et TOUT se bloque bien sûr.
A la fin j'ai mis aussi sa suppression car il n'y a pas de raison de le conserver.

Quant à la boucle FOR elle fonctionne PARFAITEMENT chez moi.... J'ai par exemple 5 fichiers *.txt différents, j'en exclue 2 au hasard dans le processus du menu d'exclusion et il ne me reste bien que 3 fichiers renommés au nom donné et indicé par le compteur "nombre" et les 2 autres sont restés intacts. Quant vous avez recopié mon code, est-ce que toute la syntaxe se positionne bien et en accord avec ce que j'ai mis dans le message (sauf les lignes qui sont trop longues et que l'on retrouvent sur 2 lignes dans le message). Bien vérifier la position des parenthèses tel que je les ai mises plus haut. Vous remarquerez dan la boucle FOR de renommage que la parenthèse est fermée après la commande REN..... mais sur la ligne suivante. Donc faire un test avec ce que j'ai mis au-dessus et je pense que cela devrait fonctionner, il n'y a pas de raison que cela ne fonctionne pas sinon il y a une différence de traitement (rapidité) entre votre micro et le mien (le mien étant un intel I7-2600 3,4 Ghz, ce qui est très rapide).


D'ailleurs dans l'exemple que vous donnez juste au-dessus il manque une parenthèse fermée pour les commandes après le DO (mais je suppose que vous ne l'avez pas recopiée ici...).

Pour dépanner, ne pas hésiter à mettre des echo %var% par exemple suivi d'un pause (ne pas oublier de les enlever par la suite).

....
.....
Echo je suis dans tel ou tel traitement
Echo valeur de VAR : %var%
Pause

Tenez-moi au courant..

Cdlt.
0
Flo313Z Messages postés 119 Date d'inscription jeudi 14 février 2013 Statut Membre Dernière intervention 16 avril 2018 6
22 mars 2013 à 00:20
C'est FORmidable ça remarche !! (je sais j'aurais plus trouver mieux ;-)
il fallait juste que je redémarre mon ordi... ça doit être a force installer et de-installer des logiciel sans reboot.
d'ailleur j'ai pensé a un truc, une fois ce petit logiciel terminé est-il possible de "lier" le batch avec d'autre languages de programmation (peu importe) pour le rendre plus esthétique ?
0
dg_belmontet Messages postés 313 Date d'inscription mercredi 30 mars 2011 Statut Membre Dernière intervention 8 juin 2016 127
22 mars 2013 à 10:32
Bonjour,

A partir d'un autre langage, normalement on peut appeler un batch comme celui-ci (via un appel du Shell) mais il s'exécutera toujours dans une boîte DOS donc toujours austère et dénué de "Look". Sinon il faut reprogrammer ces fonctions et traitements dans le langage voulu et c'est une autre histoire. Rien n'empêche de l'amétiorer au sens esthétique (mais uniquement au niveau de la présentation dans la boîte DOS/console) en mettant des couleurs au niveau des fonds d'écran et/ou du texte. Vos menus pourraient être encadrés avec des couleurs différentes. Pour les couleurs, vous pouvez utilisez "color" et saisir color /? pour l'aide. Pour les encadrements, on peut le faire avec des caractères ASCII étendus et un éditeur ASCII comme Wordpad (enregistrer au format teste MS DOS). Tout ceci est à découvrir via Google ou autre, forums etc.....

Si tout fonctionne de votre côté, vous pouvez fermer ce sujet. Merci, en bon Batch.....

Cordialement.
0
Flo313Z Messages postés 119 Date d'inscription jeudi 14 février 2013 Statut Membre Dernière intervention 16 avril 2018 6
22 mars 2013 à 10:45
En tous merci pour tous
0