IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

renommer, ranger et classer photographie


Sujet :

Scripts/Batch

  1. #1
    Candidat au Club
    Homme Profil pro
    Photographe
    Inscrit en
    Octobre 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Photographe
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2019
    Messages : 7
    Points : 4
    Points
    4
    Par défaut renommer, ranger et classer photographie
    Bonjour
    Je suis photographe professionnel et je me permet de venir vous demander de l'aide.
    J'essaye de créer un batch qui pourrait à partir d'un document csv ou txt renommer mes photos avec l'heure de capture et la date derrière puis de les ranger dans un dossier qui ne comporterez que le nom (sans heure de capture et date)

    j'aurai dans ma première colonne le nom des fichiers des photos et dans la colonne 2 le nom de la personne que je veux identifier. Exemple:
    _DSC0001.jpg MARCO POLO
    _DSC0002.jpg MARCO POLO
    _DSC0003.jpg JEAN MARTIN
    _DSC0004.jpg JEAN MARTIN

    Pour que ces photos se classe de façon chronologique, il serait super de les classer en commencer par l'année, le mois, le jour et l'heure de capture (ou de création). donc par exemple:
    MARCO POLO@2019_10_29_14-25-25.jpg
    et ensuite qu'elle se déplace dans un dossier qui s'appellerait simplement MARCO POLO

    J'ai essayé avec des bouts de codes trouvés par ci par la de faire un batch mais soit ca ne fonctionne pas, soit je lance le batch et rien ne se passe.

    Je vous laisse ces bouts de code.

    Pour renommer mais le problème c'est que lorsque l'on exécute le batch, si 2 photos doivent porter le même noms alors la 2ème n'est pas renommées. D'où l'intérêt de lui donner une date et heure.

    Code Batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @echo off
    for /F "tokens=1,2 delims=," %%j in (images.txt) do (
    rename "%%j.jpg" %%k.jpg
    )

    Pour la date j'ai trouvé un code mais je n'arrive pas à y mettre la l'heure

    Code Batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    @echo off
    setlocal enabledelayedexpansion
    for %%a in (*.jpg) do (
      for /f  "tokens=1 delims= " %%b in ('echo %%~ta') do (
       set "$date=%%b"
       set "$date=!$date:/=-!"
       ren "%%a" "%%~na_!$date!.jpg"))

    et enfin pour classer les photos dans un dossier en ne prenant que le début marqué par un _ (underscore) pour ne pas avoir l'heure et la date
    ce code quand à lui fonctionne parfaitement

    Code Batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    @echo off
    for %%f in (*.jpg) do (
    for /f "tokens=1* delims=@" %%d in ("%%~nf") do (
    md "%%d" 2>nul
    copy "%%f" "%%d" >nul
    ))
    pause

    Est il possible de créer un seul batch qui réunirait tout cela ?

    Désolé je ne suis pas expert mais j'essaye de trouver et de comprendre.
    Merci beaucoup pour votre aide.

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    il serait super de les classer en commencer par l'année, le mois, le jour et l'heure de capture (ou de création). donc par exemple:
    MARCO POLO@2019_10_29_14-25-25.jpg
    Ce n'est pas le cas de ton exemple, du coup nous ne savons pas trop ce que tu attend à ce niveau.

  3. #3
    Candidat au Club
    Homme Profil pro
    Photographe
    Inscrit en
    Octobre 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Photographe
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2019
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Mon exemple n'est peut être mal expliqué. Désolé
    En fait je ne sais pas comment on peut renommer des fichiers en y ajoutant leur date de création. J'ai ajouté un @ pour délimiter dans le classement des dossiers. Mais peut être il y avait une meilleure solution.

  4. #4
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Tu as déjà bien travaillé avec les bouts de code.

    Je te propose ceci à mettre dans un bat dans le même dossier que tes images et le fichier images.txt (avec comme séparateur la virgule).
    J'ai commenté pour t'aider à comprendre.

    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    @echo off
    setlocal enabledelayedexpansion
     
    REM Pour chaque ligne dans le fichier images.txt
    for /F "tokens=1,2 delims=," %%a in (images.txt) do (
    	REM %%~a : Contient le nom du fichier de l'image
    	REM %%~b : Contient le nom de la personne
     
    	REM Si le fichier de l'image existe
    	if exist "%%~a" (
    		REM Récupère les informations (date et extension) de l'image
    		for %%c in (%%a) do (
    			REM %%~tc : Contient la date non formater
    			REM %%~xc : Contient l'extension du fichier
     
    			REM Formatage de la date
    			set date_tmp=%%~tc
    			set date_tmp=!date_tmp:~6,4!_!date_tmp:~3,2!_!date_tmp:~,2!-!date_tmp:~11,2!_!date_tmp:~14,2!
    			REM !date_tmp! : Contient la date formatée
     
    			REM Si le dossier cible (personne) n'existe pas on le crée
    			if not exist "%%~b\" md "%%~b"
     
    			REM Effectue la copie dans le dossier persone correcpondand et renomme le fichier (/Y pour écraser si besoin)
    			copy "%%~a" "%%~b\!date_tmp! %%~b%%~xc" /Y > nul
    		)
    	)
    )
    pause

    A noter que %%~tc ne semble pas gérer les fuseaux horaires, tu peux donc avoir un décalage

  5. #5
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Le plus compliqué va être de créer un sacré fichier image.txt

  6. #6
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 839
    Points : 9 222
    Points
    9 222
    Par défaut

    Ce code sert juste pour créer un fichier de type .csv avec le delimiteur ; "Nom du fichier";"Chemin du fichier";"La date de la création de ce fichier"
    Code BAT : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    @echo off
    mode con cols=70 lines=3 & Color 0A
    Title Get FilePath with their CreationDate 
    Set "Target_dir=%userprofile%\Pictures\AutoSaveScreenShot\"
    REM IMPORTANT Don't forget the final backslash in the path of your folder\
    Call :Check_backslash %Target_dir% Target_dir
    Set "LogFile=%~dpn0.csv"
    If Exist "%LogFile%" Del "%LogFile%"
    SetLocal EnableDelayedExpansion
    @For /f "tokens=1,2 delims=:" %%a in ('Dir "%Target_dir%" /s /b /o:n /ad') do (
        REM Set "Drive=%%a"
        REM IMPORTANT Don't forget the final backslash in the path of your folder\
        Set "Folder_Path=%%b\"
        Call :Check_backslash !Folder_Path! Folder_Path
        Call :Add_backSlash !Folder_Path! Folder_Path
        @For /f "Tokens=1,2 Skip=1 Delims= " %%a in ('WMIC DATAFILE WHERE "PATH='!Folder_Path!'" GET CreationDate^,Caption') do (
        REM The output of WMIC is unicode !
        REM The trailing <CR> can be removed by passing the value through another FOR /F loop.
        REM This also removes the phantom "blank" line (actually a <CR>) ie The second for /f loop
            @For /f "delims=" %%f in ("%%a") do (
                Set "FileName=%%~nxa"
                Set "FilePath=%%a"
                set "DT=%%b"
                REM Convert ISO date to Date
                set "DT=!DT:~0,4!_!DT:~4,2!_!DT:~6,2!_!DT:~8,2!-!DT:~10,2!-!DT:~12,2!"
                Call :Scanning "!FileName!"
                echo "!FileName!";"!FilePath!";"!DT!">>"!LogFile!"
            )
        )
    )
    If Exist "!LogFile!" Start "" /MAX Notepad "!LogFile!" & Exit
    ::---------------------------------------------------------------------
    :Add_backSlash <String> <Var to Set>
    Rem Subroutine to replace the simple "\" by a double "\\" into a String
    Set "MyString=%1"
    Set "String=\"
    Set "NewString=\\"
    Call Set "%2=%%MyString:%String%=%NewString%%%"
    Exit /b
    ::---------------------------------------------------------------------
    :Check_backslash
    Set "datapath=%1"
    IF NOT "%datapath:~-1%"=="\" SET "%2=%datapath%\"
    Exit /b
    ::---------------------------------------------------------------------
    :Scanning <file>
    Cls & Color 0A
    echo(
    echo                  "%~1"  ...
    goto :eof
    ::---------------------------------------------------------------------

  7. #7
    Candidat au Club
    Homme Profil pro
    Photographe
    Inscrit en
    Octobre 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Photographe
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2019
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Merci à tous ! c'est super !
    Peut-on ajouter les secondes ? car en 1 minutes je peux faire 10 photos.
    et si je veux que le fichier commence par le nom de la personne suivit de la date je dois mettre %%~b%% avant %%~b\!date_tmp! ?

  8. #8
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Comme ceci
    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    copy "%%~a" "%%~b\%%~b !date_tmp!%%~xc" /Y > nul

    Non, les secondes ne sont pas disponibles.
    La date que nous récupérons est affiché comme ceci : 16/10/2019 07:04

  9. #9
    Candidat au Club
    Homme Profil pro
    Photographe
    Inscrit en
    Octobre 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Photographe
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2019
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Je crois avoir réussi à avoir les secondes

    Code Batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    @echo off
    setlocal enabledelayedexpansion
     
    REM Pour chaque ligne dans le fichier images.csv
    for /F "tokens=1,2 delims=;" %%a in (images.csv) do (
    	REM %%~a : Contient le nom du fichier de l'image
    	REM %%~b : Contient le nom de la personne
     
    	REM Si le fichier de l'image existe
    	if exist "%%~a" (
    		REM RÈcupËre les informations (date et extension) de l'image
    		for %%c in (%%a) do (
    			REM %%~tc : Contient la date non formater
    			REM %%~xc : Contient l'extension du fichier
     
    			REM Formatage de la date
    			set date_tmp=%%~tc
    			set date_tmp=!date_tmp:~6,4!_!date_tmp:~3,2!_!date_tmp:~,2!_!date_tmp:~11,2!-!date_tmp:~14,2!-!date_tmp:~6,2!
    			REM !date_tmp! : Contient la date formatÈe
     
    			REM Si le dossier cible (personne) n'existe pas on le crÈe
    			if not exist "%%~b\" md "%%~b"
     
    			REM Effectue la copie dans le dossier persone correcpondand et renomme le fichier (/Y pour Ècraser si besoin)
    			copy "%%~a" "%%~b\%%~b_!date_tmp!%%~xc" /Y > nul
    		)
    	)
    )
    pause

  10. #10
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Je crois avoir réussi à avoir les secondes
    Non, certainement pas.

  11. #11
    Candidat au Club
    Homme Profil pro
    Photographe
    Inscrit en
    Octobre 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Photographe
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2019
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Comment faire alors pour que le batch convertisse des photos qui auraient été prises dans la meme minute?
    Car ici certaines ne sont pas renommées puisqu'elles ont la meme heure et minute de création.

  12. #12
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Comme ceci, nous nous appuyons maintenant sur la date de création de l'image et pas sur la date de dernière modification (ce qui me parait mieux mais ça peut être facilement modifié si besoin)

    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    @echo off
    setlocal enabledelayedexpansion
     
    REM Pour chaque ligne dans le fichier images.txt
    for /F "tokens=1,2 delims=," %%a in (images.txt) do (
    	REM %%~a : Contient le nom du fichier de l'image
    	REM %%~b : Contient le nom de la personne
     
    	REM Si le fichier de l'image existe
    	if exist "%%~a" (
    		REM Récupère les informations (chemin complet et extension) de l'image
    		for %%c in (%%a) do (
    			set ext=%%~xc
    			set fullpath=%%~fc
    		)
     
    		REM Double les \ pour la commande wmic dessous
    		set fullpath=!fullpath:\=\\!
     
    		REM Récupère la date avec les secondes (les millisecondes sont aussi disponible si besoin)
    		for /F "usebackq tokens=*" %%d in (`"wmic datafile where name="!fullpath!" get creationdate ^| findstr /brc:[0-9]"`) do (
    			set date_tmp=%%~d
    			set date_tmp=!date_tmp:~,4!_!date_tmp:~4,2!_!date_tmp:~6,2!_!date_tmp:~8,2!-!date_tmp:~10,2!-!date_tmp:~12,2!
    		)
     
    		REM Si le dossier cible (personne) n'existe pas on le crée
    		if not exist "%%~b\" md "%%~b"
     
    		REM Effectue la copie dans le dossier personne correspondant et renomme le fichier (/Y pour écraser si besoin)
    		copy "%%~a" "%%~b\!date_tmp! %%~b!ext!" /Y > nul
     
    	)
    )
     
    pause

Discussions similaires

  1. Renommer une Base
    Par YanK dans le forum Requêtes
    Réponses: 7
    Dernier message: 25/10/2017, 13h24
  2. Logiciel pour ranger et classer ses codes source. Une idée?
    Par Spidyy dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 25/06/2016, 13h55
  3. Classer/ranger de façon croissante un tableau
    Par neogamaes dans le forum MATLAB
    Réponses: 2
    Dernier message: 20/05/2010, 13h53
  4. [] [Réseau] Renommer des fichiers dans un site FTP
    Par JerBi dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 22/08/2003, 00h35
  5. Renommer un repertoire
    Par Sitas dans le forum Langage
    Réponses: 5
    Dernier message: 14/08/2002, 11h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo