(Boucle FOR) manque une opérande =>BATCH
Résolu/Fermé
Flo313Z
Messages postés
121
Date d'inscription
jeudi 14 février 2013
Statut
Membre
Dernière intervention
10 juin 2024
-
17 mars 2013 à 12:31
Flo313Z Messages postés 121 Date d'inscription jeudi 14 février 2013 Statut Membre Dernière intervention 10 juin 2024 - 22 mars 2013 à 10:45
Flo313Z Messages postés 121 Date d'inscription jeudi 14 février 2013 Statut Membre Dernière intervention 10 juin 2024 - 22 mars 2013 à 10:45
A voir également:
- (Boucle FOR) manque une opérande =>BATCH
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Fichier batch - Guide
- Copytrans heic for windows - Télécharger - Visionnage & Diaporama
- Download instagram for pc - Télécharger - Divers Communication
- Idm for mac - Télécharger - Téléchargement & Transfert
6 réponses
dg_belmontet
Messages postés
313
Date d'inscription
mercredi 30 mars 2011
Statut
Membre
Dernière intervention
8 juin 2016
128
17 mars 2013 à 17:47
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.
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.
Flo313Z
Messages postés
121
Date d'inscription
jeudi 14 février 2013
Statut
Membre
Dernière intervention
10 juin 2024
6
18 mars 2013 à 00:08
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%% ??
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%% ??
dg_belmontet
Messages postés
313
Date d'inscription
mercredi 30 mars 2011
Statut
Membre
Dernière intervention
8 juin 2016
128
18 mars 2013 à 08:36
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.....
%%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.....
Flo313Z
Messages postés
121
Date d'inscription
jeudi 14 février 2013
Statut
Membre
Dernière intervention
10 juin 2024
6
18 mars 2013 à 19:04
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
Voilà le nouveau code de RenommeMan.bat
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 :
ce qui rend le fichier invisible et une fois que la boucle FOR et terminé je remet en normal :
et voilà
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à
dg_belmontet
Messages postés
313
Date d'inscription
mercredi 30 mars 2011
Statut
Membre
Dernière intervention
8 juin 2016
128
19 mars 2013 à 16:19
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.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Flo313Z
Messages postés
121
Date d'inscription
jeudi 14 février 2013
Statut
Membre
Dernière intervention
10 juin 2024
6
Modifié par Flo313Z le 20/03/2013 à 20:44
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 ;)
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
exemple en php
ce qui est de :
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 !
j'ai essayé comme ca :
ca donne pas plus de resultat
alors si ta une idee elle est la bienvenue
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
dg_belmontet
Messages postés
313
Date d'inscription
mercredi 30 mars 2011
Statut
Membre
Dernière intervention
8 juin 2016
128
Modifié par dg_belmontet le 21/03/2013 à 00:19
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.
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.
Flo313Z
Messages postés
121
Date d'inscription
jeudi 14 février 2013
Statut
Membre
Dernière intervention
10 juin 2024
6
22 mars 2013 à 00:20
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 ?
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 ?
dg_belmontet
Messages postés
313
Date d'inscription
mercredi 30 mars 2011
Statut
Membre
Dernière intervention
8 juin 2016
128
22 mars 2013 à 10:32
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.
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.
Flo313Z
Messages postés
121
Date d'inscription
jeudi 14 février 2013
Statut
Membre
Dernière intervention
10 juin 2024
6
22 mars 2013 à 10:45
22 mars 2013 à 10:45
En tous merci pour tous