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 :

Déplacer des fichiers dans des sous dossiers sous condition


Sujet :

Scripts/Batch

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2017
    Messages : 16
    Points : 1
    Points
    1
    Par défaut Déplacer des fichiers dans des sous dossiers sous condition
    Bonjour à tous,
    Je suis totalement novice et ne maîtrise pas les commandes DOS. Mes recherches sur le forum ne m'ont pas permis de trouver une solution alors je vous remercie par avance de l'aide que vous pourrez m'apporter.

    Je cherche à automatiser sous Windows, avec une "moulinette" .bat, le déplacement de fichiers nommés numériquement à 6 chiffres (123456.jpg) vers des sous-dossiers organiser par tranche de 5000. Ex dossiers : 100000 à 104999, 105000 à 109999, ....

    Ces fichiers doivent écraser ceux du même nom déjà présents dans les sous dossiers.

    Pouvez-vous m'orienter ?

  2. #2
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    Je ne suis pas un spécialiste batch windows mais Il y a la faq déjà
    pour défricher https://windows.developpez.com/faq/batch/

    ex : Comment renommer une série de fichiers en ajoutent un numéro a chacun ?
    =>
    https://windows.developpez.com/faq/b...ercher_fichier
    Emérite, émérite je ne pense pas ... plutôt dans le développement depuis FORT FORT longtemps, c'est mon job, ça oui
    A part ça ... Il ne pleut jamais en Moselle !

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2017
    Messages : 16
    Points : 1
    Points
    1
    Par défaut
    Bonjour VTTman et merci pour ta réponse.
    J'ai beaucoup parcouru le forum mais je n'ai pas trouvé de sujet similaire.
    Sur Google j'en avais trouvé un mais c'était sous linux ☹️.
    Si quelqu'un a une idée je suis preneur.

  4. #4
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    Citation Envoyé par jml.pub Voir le message
    ...
    Sur Google j'en avais trouvé un mais c'était sous linux ☹️.
    Si quelqu'un a une idée je suis preneur.
    Dernière remarque de ma part
    => Sur windows 10 il y a maintenant un environnement linux de disponible ... au cas où ...
    Emérite, émérite je ne pense pas ... plutôt dans le développement depuis FORT FORT longtemps, c'est mon job, ça oui
    A part ça ... Il ne pleut jamais en Moselle !

  5. #5
    Membre expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Points : 3 768
    Points
    3 768
    Par défaut
    Salut,

    quel est le no de ton premier fichier ?


    000001.jpg

    ?
    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2017
    Messages : 16
    Points : 1
    Points
    1
    Par défaut
    Bonjour Sachadee et merci pour ton aide.

    Le premier fichier (*.jpg) commence à 115500.
    J'ai un peu plus de 55200 fichiers répartis dans 20 dossiers, organisés par tranche de 5000, le 1er (vide) 100000-104999, 115000-119999, 120000-124999, 125000-129999, ...
    Je dois réintroduire dans chacun des dossiers des fichiers (photos) mis à jour en écrasant les fichiers du même nom déjà présents.

  7. #7
    Membre expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Points : 3 768
    Points
    3 768
    Par défaut
    Ton problème étant un peu differents à l'énoncer.

    Je te propose de faire un index de tes fichiers existants dans index.txt et ensuite on récupère le chemin de copy
    dans cette index.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @echo off
    
    dir /b/s *.jpg >index.txt
    
    for %%a in (*.jpg) do (
    	echo Traitemenr de : [ %%a ]
    	for /f "delims=" %%b in ('findstr -c:"%%a" index.txt') do (
    		echo Deplacement de [ "%%~dpnxa" ]
    		echo           Dans [ "%%b" ]
    	)
    )
    Si tu as des fichiers nouveau qui ne sont pas encore attribué à un dossier on peu rajouter un code pour créer automatiquement
    le dossier correspondant à ce nouveau fichier.

    Voilá l'idée. Il est clair qu'il faut l'adapter à ta situation pour les chemins et autres.
    Si tu as des roblèmes, avise !!!

    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  8. #8
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 183
    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 183
    Points : 5 751
    Points
    5 751
    Par défaut
    Voici une autre proposition, à lancer dans le dossier à traiter.
    Pour tout nom de fichier numérique avec extension .jpg, il créer le dossier avec le nom approprié (groupe de 5000), et déplace le fichier.

    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @echo off
    SETLOCAL ENABLEDELAYEDEXPANSION
    for %%a in (*.jpg) do (
    	echo %%~na|FINDSTR /R /C:"^[0-9]*$" >nul 2>nul&&(
    		set /a NumBas=%%~na/5000*5000
    		set /a NumHaut=^(%%~na/5000*5000^)+4999
    		echo %%~a -^> !NumBas!-!NumHaut!
    		IF NOT EXIST "!NumBas!-!NumHaut!" MD "!NumBas!-!NumHaut!"
    		MOVE /Y "%%~a" "!NumBas!-!NumHaut!\%%~a" >nul
    	)
    )

    PS : pour la création des fichiers de test
    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    FOR /L %%a IN (95000,50,150000) DO echo %%a>%%a.jpg

  9. #9
    Membre expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Points : 3 768
    Points
    3 768
    Par défaut
    @Excellent +1
    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2017
    Messages : 16
    Points : 1
    Points
    1
    Par défaut
    Bonjour à tous et un grand merci pour votre aide.
    Je n'ai peut-être pas été assez précis dans mon énoncé.
    Il s'agit de mise à jour de fichiers (photos) existants.
    J'ai donc un dossier "nouvelles photos" contenant les nouveaux fichiers et je dois les déplacer vers un dossier "photos" contenant des sous-dossiers existants "100000-104999, 115000-119999, 120000-124999, 125000-129999, ...".
    L'arborescence des dossiers existe, il n'y a donc pas de sous-dossiers à créer, juste remplacer les fichiers dans le bon dossier.
    Est ce que cela change quelque chose pour vos solutions proposées ?

  11. #11
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 183
    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 183
    Points : 5 751
    Points
    5 751
    Par défaut
    merci sachadee, venant d'un expert comme toi

    Un peu, le fichier bat doit être placé dans le dossier qui contient "nouvelles photos" et "photos".

    Si tu est sur que tes dossiers cibles existent, tu peux supprimer la ligne IF NOT EXIST "%cible%\!NumBas!-!NumHaut!" MD "%cible%\!NumBas!-!NumHaut!"
    Personnellement je la laisserai ça ne mange pas de pain, si ?

    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @echo off
    SETLOCAL ENABLEDELAYEDEXPANSION
    set source=nouvelles photos
    set cible=photos
    for %%a in ("%source%\*.jpg") do (
    	echo %%~na|FINDSTR /R /C:"^[0-9]*$" >nul 2>nul&&(
    		set /a NumBas=%%~na/5000*5000
    		set /a NumHaut=^(%%~na/5000*5000^)+4999
    		echo %%~na -^> !NumBas!-!NumHaut!
    		IF NOT EXIST "%cible%\!NumBas!-!NumHaut!" MD "%cible%\!NumBas!-!NumHaut!"
    		MOVE /Y "%%~a" "%cible%\!NumBas!-!NumHaut!" >nul
    	)
    )

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2017
    Messages : 16
    Points : 1
    Points
    1
    Par défaut
    Bonjour à tous,
    Un grand merci pour votre aide et plus particulièrement à ericlm128.
    Je viens de tester la "moulinette" d'ericlm128 avec 900 photos et ça fonctionne parfaitement.
    Un vrai gain de temps pour moi et un risque d'erreurs en moins.

    Le chemin des dossiers (source et cible) peut-il être spécifié afin d'utiliser par exemple une clé USB ou le serveur local pour le dossier "nouvelles photos" et ne pas avoir à placer le .bat dans le dossier parent du dossier cible ?

  13. #13
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 183
    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 183
    Points : 5 751
    Points
    5 751
    Par défaut
    Oui cela fonctionne aussi, il suffit de "jouer" sur les chemins relatifs et absolues en fonction de l'emplacement de ton script et des deux dossiers source et cible.

    Exemple :

    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set source=D:\test\nouvelles photos
    set cible=C:\Users\moi\Desktop\test\photos

    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set source=nouvelles photos
    set cible=C:\Users\moi\Desktop\test\photos

    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set source=D:\test\nouvelles photos
    set cible=photos

    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set source=nouvelles photos
    set cible=photos

  14. #14
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2017
    Messages : 16
    Points : 1
    Points
    1
    Par défaut
    Génial !
    Merci beaucoup.

  15. #15
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2017
    Messages : 16
    Points : 1
    Points
    1
    Par défaut
    Bonjour à tous,

    J'ai une autre demande, j'ai besoin de lister les fichiers (*.jpg) d'un dossier, donc j'utilise la commande DIR :

    cd C:\Users\moi\Documents\dossier\PHOTO

    dir /b /p *jpg > "C:\Users\moi\Documents\dossier\resultat DIR photos\dir_photos.txt"

    celà fonctionne très bien, mais je souhaiterai pour faciliter le traitement suivant, que les fichiers ne comporte pas l'extension .jpg

    J'ai trouvé ça :

    for /f "tokens=*" %%i in ("C:\Users\moi\Documents\dossier\PHOTO") do echo %%~ni

    Mais ça ne fonctionne pas, je dois oublier de rajouter quelque chose.

    Merci d'avance pour votre aide.

  16. #16
    Membre expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Points : 3 768
    Points
    3 768
    Par défaut
    salut,

    t'as toutes les réponses :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for /f "tokens=*" %%i in ('dir  /b /a-d "C:\Users\moi\Documents\dossier\PHOTO"') do echo %%~ni
    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  17. #17
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 183
    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 183
    Points : 5 751
    Points
    5 751
    Par défaut
    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    dir /b /p *jpg > "C:\Users\moi\Documents\dossier\resultat DIR photos\dir_photos.txt"

    Tu est sur de ton "/p" ? Arrêt après l'affichage d'un écran d'informations.
    Et on *jpg serais mieux en *.jpg

    Je te propose ceci, dans un .bat
    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @echo off
    (for %%a in ("C:\Users\moi\Documents\dossier\PHOTO\*.jpg") do echo %%~na)>"C:\Users\moi\Documents\dossier\resultat DIR photos\dir_photos.txt"

  18. #18
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2017
    Messages : 16
    Points : 1
    Points
    1
    Par défaut
    Merci à tous les deux pour vos réponses rapides.

    ericlm128 : heu, je ne suis sûr de rien ! C'est pour ça que ça ne fonctionne pas !!!

    Je viens de tester ta commande et ça fonctionne parfaitement.

    Un grand merci.

  19. #19
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2017
    Messages : 16
    Points : 1
    Points
    1
    Par défaut
    Bonjour à tous,

    J'ai encore besoin de votre aide.

    Le batch suivant pour générer une liste de fichiers sans l'extension ".jpg" fonctionne très bien pour des fichiers nommés numériquement "123456.jpg" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @echo off
    (for %%a in ("C:\Users\moi\Documents\dossier\PHOTO\*.jpg") do echo %%~na)>"C:\Users\moi\Documents\dossier\resultat DIR photos\dir_photos.txt"
    Avec des fichiers nommés "s36900123.jpg" ça ne fonctionne plus, est-ce que cela provient du "%%a" ?

    Si au passage, la moulinette pouvait supprimer le "s" du début du nom du fichier ça serait le top !

    Donc obtenir la liste des fichiers sans le "s" du début et sans l'extension ".jpg"

    Je vous remercie par avance,

  20. #20
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 183
    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 183
    Points : 5 751
    Points
    5 751
    Par défaut
    Avec des fichiers nommés "s36900123.jpg" ça ne fonctionne plus, est-ce que cela provient du "%%a" ?
    Je viens de tester ça fonctionne chez moi, qu'est ce qui ne fonctionne plus ?

    Si au passage, la moulinette pouvait supprimer le "s" du début du nom du fichier ça serait le top !
    Tu n'a que le "s" à supprimer, il est sur tout tes fichiers ?

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/02/2015, 20h07
  2. Script shell pour renommer des fichiers dans des sous répértoires
    Par ibuto dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 25/12/2013, 20h52
  3. Récupérer des fichiers dans des repertoires et sous répertoires
    Par philcphilc dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 05/09/2013, 19h37
  4. Réponses: 12
    Dernier message: 11/05/2012, 11h17
  5. Chemin d'accès des fichiers dans des sous rep
    Par Le Veilleur dans le forum C++Builder
    Réponses: 4
    Dernier message: 17/11/2004, 14h37

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