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

Résolu
Flo313Z Messages postés 127 Statut Membre -  
Flo313Z Messages postés 127 Statut Membre -
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

6 réponses

  1. dg_belmontet Messages postés 320 Date d'inscription   Statut Membre Dernière intervention   128
     
    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
  2. Flo313Z Messages postés 127 Statut Membre 6
     
    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
    1. dg_belmontet Messages postés 320 Date d'inscription   Statut Membre Dernière intervention   128
       
      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
  3. Flo313Z Messages postés 127 Statut Membre 6
     
    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
  4. dg_belmontet Messages postés 320 Date d'inscription   Statut Membre Dernière intervention   128
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Flo313Z Messages postés 127 Statut Membre 6
     
    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
  7. dg_belmontet Messages postés 320 Date d'inscription   Statut Membre Dernière intervention   128
     
    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
    1. Flo313Z Messages postés 127 Statut Membre 6
       
      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
    2. dg_belmontet Messages postés 320 Date d'inscription   Statut Membre Dernière intervention   128
       
      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
    3. Flo313Z Messages postés 127 Statut Membre 6
       
      En tous merci pour tous
      0