Script Windows, copier le contenu de sous-répertoires

Résolu
Bonjour à tous,

avant toute chose je tien à préciser que je travail sous un environnement Windows 7 64bits.

Ma situation est donc la suivante, je dispose de plusieurs dossiers contenant eux même plusieurs dossiers contenant eux même des photos et des vidéos:

Dossier racine
--->Dossier1
-------->Sousdossier1
-------------------->Photos
-------------------->Photos
--->Dossier2
-------->Sousdossier2
-------------------->Photos
-------------------->Sousdossier3
-------------------------->Vidéos

Mon objectif serai-donc de lancer un script depuis la racine afin de "remonter" toutes les photos et les vidéos dans le dossier racine soit via une boucle récursive soit directement via une commande qui copierai exclusivement les fichiers .jpeg et .mp4 (ou autre).
Par la suite j'envisagerai aussi une option permettant la suppression des dossiers vides.

Dossier racine
--->Photos
--->Photos
--->Vidéos

J'aimerai donc savoir si vous auriez des idées de langage ou de solution pour pouvoir arrivé à se résultat, mieux si certain se sont déjà penchés sur la question, m'apporter leurs expériences.

Merci d'avance de vos réponses.

8 réponses

  1. Contributeur
    je vois.
    si le nom existe dans %racine% on copie le fichier en ajoutant un nombre aléatoire dans le nom
    @echo off
    set racine=dir
    for /R %racine% %%a in (*.jpeg *.mp4) do (
    	set nom=%%~nxa
       	if exist "%racine%\%nom%"
    		copy "%%a" "%racine%\%%~na%RANDOM%%%~xa"
    	else
      		copy "%%a" "%racine%")
    
    1
    1. J'ai une erreur de syntaxe apparemment
      j'ai pas totalement compris malgré mes recherches ce que renvoi %%~nxa et comme je ne peu pas faire un echo :(
      en tous cas merci de passer du temps à m'aider je sens qu'on touche au but mais je ne vois pas d'où peu provenir l'erreur j'ai eu beau tester quelques changement rien n'y fait.
      0
    2. Contributeur
      %%~nxa retourne le nom du fichier sans le chemin (help for)
      mon code est faux, essayer
      @echo off  
      set racine=dir  
      for /R %racine% %%a in (*.jpeg *.mp4) do (  
          if exist "%racine%\%%~nxa" (  
        copy "%%a" "%racine%\%%~na%RANDOM%%%~xa"  
       ) else (  
          copy "%%a" "%racine%"  
       )  
      )  
      
      0
  2. Contributeur
    hello
    enlever le echo pour effectuer la copie, sinon il ne fait qu'afficher
    @echo off  
    set racine=dir  
    for /R %racine% %%a in (*.jpeg *.mp4) do echo copy "%%a" "%racine"
    0
    1. Je vais tester ça merci
      0
      1. Edit : ton code marche bien seulement j'aimerai maintenant pouvoir gérer les fichiers qui portent le même nom (j'ai déjà regardé dans les options de copy et Xcopy mais je n'ai rien trouver de concluant)
        0
      2. Contributeur
        ecraser les fichiers qui ont le même nom ou les renommer ?
        0
      3. les renommer quitte à ce que ça soit fait avant la copie, le nom n'a pas d'importance
        0
    2. Contributeur
      je n'ai pas testé
      @echo off  
      set racine=dir  
      for /R %racine% %%a in (*.jpeg *.mp4) do (
         if exist "%racine%\%%a" ren "%racine%\%%a" "%racine%\%%~na%RANDOM%.%%~xa"
        copy "%%a" "%racine%")
      0
      1. Merci pour ton code malheureusement je n'arrive toujours pas à ce que je souhaite,le changement de nom ne s'effectue pas, peu être faudrait-il intervenir sur les noms avant la copie car dans mon cas je copie les fichiers dans un niveau supérieur de l'arborescence d'où se trouve mon script et toi tu utilise un seul chemin pour tous c'est là ou je ne comprend pas ta démarche ?!

        %racine%\%%a signifie que si dans le dossier où j'envoie mes photos y a déjà une photo du même nom elle est renommer avec la fonction random.

        Concrètement pour le moment mon deuxième dossier de photo est bien copier là ou je le souhaite mais il écrase les premiers photos et aucun renommage n'a lieu.

        Un premier dossier
        -->Mon dossier photo (où je souhaite mettre mes photos)
        --------->script
        --------->dossier de photo en vrac
        --------------->dossier de photos1
        --------------->dossier de photos2

        Après le script
        Un premier dossier
        -->Mon dossier photo (où je souhaite mettre mes photos)
        Photo1
        Photo2
        Photo3
        Photo100
        (ensuite j'ai un message me demandant si je souhaite remplacer le fichier photo1 car elle porte le même nom qu'un fichier déjà existant)
        --------->script
        --------->dossier de photo en vrac
        --------------->dossier de photos1
        --------------->dossier de photos2
        0
        1. Merci ça a fonctionner comme sur des roulettes :)
          0
          1. bonjour, désolé pour le déterrage de topic mais je cherche a faire la meme chose, >bachus, pourriez-vous me donner le code final ce qui fonctionne pour vous.

            par avance merci.
            0
            1. Bonjour,

              Je souhaiterai exactement faire l'inverse :)
              C'est à dire que j'ai un répertoire racine qui contient :

              Dossier-Racine :
              fichier (1).txt
              fichier (1).nfo
              fichier (1).tbn
              fichier (1).jpg
              fichier (2).txt
              fichier (2).nfo
              fichier (2).tbn
              fichier (2).jpg
              fichier (3).txt
              fichier (3).nfo
              fichier (3).tbn
              fichier (3).jpg

              et je souhaiterai avoir :

              Dossier-Racine :
              --> Dossier (1) :
              fichier (1).txt
              fichier (1).nfo
              fichier (1).tbn
              fichier (1).jpg
              --> Dossier (2) :
              fichier (2).txt
              fichier (2).nfo
              fichier (2).tbn
              fichier (2).jpg
              --> Dossier (3) :
              fichier (3).txt
              fichier (3).nfo
              fichier (3).tbn
              fichier (3).jpg
              0