Automatisation d'un script pour renommer les fichiers dans plusieurs sous dossiers

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Fabien Lassus
Messages : 2
Enregistré le : 08 Nov 2022, 16:36

Automatisation d'un script pour renommer les fichiers dans plusieurs sous dossiers

Messagepar Fabien Lassus » 15 Déc 2022, 14:00

Bonjour,
Dans l'objectif de renommer des fichiers présent dans des sous dossier j'ai utilisé ce script.

Code : Tout sélectionner

setwd("C:/Users/jfuse/Desktop/04 - Copie/BL20220416")
#ici le chemin correspond à un sous-dossier "jour" et l'idée est de répéter l'opération pour chaque sous- dossier jours compris dans un dossier "mois"



files.old <- list.files(path = "C:/Users/jfuse/Desktop/04 - Copie/BL20220416")

add_prefix <- function(x, path = basename(normalizePath(".")), sep = "_"){
  paste(path, x, sep = sep)
}

add_prefix(files.old)

                       
                         files.new <-add_prefix(files.old)
                         
                         file.rename(files.old, files.new)
                         

L'idée est de faire figurer le nom du dossier parent (comprenant la date) dans le nom de chaque fichier du dossier.
Cependant ce script ne fonctionne que pour un sous dossier (correspondant à un jour) et il me faut répéter l'opération pour chaque sous dossier(jours) d'un dossier (mois). je dois renommer les fichiers de toute une année et donc répéter théoriquement l'opération 365 fois. Je souhaite donc inclure dans le script une boucle le faisant répéter l'opération dans un sous dossier puis de passer au suivant et donc automatiser le script par mois.
Je n'ai malheureusement pas trouvé de réponse dans les discussions existantes bien que je n'ai pas pu chercher de manière très approfondie par manque de temps (ou de technique je débute sur ce forum). Si la réponse existe je m'en excuse d'avance.
Merci d'avance pour vos réponse
Bien cordialement

Maxime Deniaux
Messages : 70
Enregistré le : 11 Fév 2022, 22:49
Contact :

Re: Automatisation d'un script pour renommer les fichiers dans plusieurs sous dossiers

Messagepar Maxime Deniaux » 15 Déc 2022, 20:31

Bonsoir Fabien,

voici une solution possible (si j'ai bien compris ce que vous vouliez) :

Code : Tout sélectionner

# Fonction

add_prefix <- function(x, path = basename(normalizePath(".")), sep = "_"){
  paste(path, x, sep = sep)
}



# Chemin du dossier contenant les dossiers 'MOIS'

setwd("C:/Users/maxim/Music/Dossier/")



# Liste des dossiers 'MOIS'

Dossiers_Mois <- list.files()



# Boucle sur chaque dossier 'MOIS'

i = 1

while(i <= length(Dossiers_Mois)){
   
    # Chemin du mois 'i'
   setwd(paste("C:/Users/maxim/Music/Dossier/",Dossiers_Mois[i],sep = ""))
   
    # Liste de dossiers dans le chemin du mois 'i'
    files.old <- list.files()
   
    # Nouveaux noms de fichiers
    files.new <-add_prefix(files.old)
   
    # Affectation des nouveaux noms de fichiers
    file.rename(files.old, files.new)
   
   i = i + 1
}


J'ai pris la liberté d'utiliser mes propres chemins...donc il faudrait évidemment changer le code et utiliser les vôtres.

Dites moi si ça fonctionne (de mon côté, cela semble avoir fonctionné en tout cas...) !

Bonne fin de soirée

Fabien Lassus
Messages : 2
Enregistré le : 08 Nov 2022, 16:36

Re: Automatisation d'un script pour renommer les fichiers dans plusieurs sous dossiers

Messagepar Fabien Lassus » 16 Déc 2022, 14:16

Bonjour,
Merci pour cette réponse rapide !
En effet le script fonctionne mais pas exactement pour faire ce que je voudrais.
En utilisant ton script j'inclus le nom du dossier "mois" dans le nom des sous dossier "jour" contenant les fichiers cibles.
Mais ce que je voudrais c'est inclure au sein d'un dossier "mois" pour chaque sous-dossier "jour" le nom du sous-dossier "jour" à chaque fichier du sous dossier "jour".
par exemple mon dossier d'avril s'appelle 04
les sous-dossiers jours s'appellent BL20220401 etc
et dans ces sous dossiers j'ai divers fichiers.

En faisant tourner le script pour le mois d'avril "04" j'ai les sous dossier jour de la forme "04_BL20220401" et les fichiers dans le sous dossier n'ont pas bougés. Je voudrais que le nom du sous dossier ne change pas ( ca importe peu en réalité mais ce n'est pas l'objectif) et que les fichiers dans le sous dossier incluent BL20220401 dans leur nom et qu'il répète l'opération pour les sous dossier BL20220401 BL20220402 etc
Il est possible que je n'ai pas mis les bons chemins d'accès. J'ai mis dans le premier setwd le chemin du dossier mois et dans le second le chemin du sous dossier jour.
J'espère avoir été compréhensible ce n'est pas facile à expliquer par écrit.
Merci encore pour l'aide apporté !
bonne journée

Maxime Deniaux
Messages : 70
Enregistré le : 11 Fév 2022, 22:49
Contact :

Re: Automatisation d'un script pour renommer les fichiers dans plusieurs sous dossiers

Messagepar Maxime Deniaux » 16 Déc 2022, 15:22

Bonjour,

ok alors il faut ajouter une autre boucle comme cela :

Code : Tout sélectionner

# Fonction

add_prefix <- function(x, path = basename(normalizePath(".")), sep = "_"){
  paste(path, x, sep = sep)
}



# Chemin du dossier contenant les dossiers 'MOIS'

setwd("...")  # à completer
chemin_dossiers_mois = getwd()


# Liste des dossiers 'MOIS'

Dossiers_Mois <- list.files()


# Boucle sur chaque dossier 'MOIS'

i <- 1
j <- 1

while(i <= length(Dossiers_Mois)){
   
    # Chemin du MOIS 'i'
    setwd(paste(chemin_dossiers_mois,"/",Dossiers_Mois[i],sep = ""))
   
    # Sauvegarde du chemin pour la prochaine boucle 
    Chemin_mois = getwd()
 
    # Liste de dossiers 'jours' dans le MOIS 'i'
    files.jours <- list.files()
   
   
    # Boucle sur chaque dossier 'JOUR'
   
    while(j <= length(files.jours)){
     
     
      # Chemin du JOUR 'j'
      setwd(paste(Chemin_mois,"/",files.jours[j],sep = ""))
     
      # Anciens noms
      files.old <- list.files()
     
      # Nouveaux noms
      files.new <- add_prefix(files.old)
   
      # Affectation des nouveaux noms de fichiers
      file.rename(files.old, files.new)
     
     
      j <- j + 1
     
    }
   
   
   # On passe au mois suivant. Et on remet j = 1, sinon ça marchera pas !
   
   j <- 1
   i <- i + 1
}



J'espère que j'ai compris cette fois :)


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité