[R] Renommer un fichier s'il est existant

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
0xyg3n
Niveau 2
Niveau 2
Messages : 25
Enregistré le : jeu. 07 mars 2013 22:43
Status : Hors ligne

[R] Renommer un fichier s'il est existant

#1

Message par 0xyg3n »

Bonjour,

Après avoir commencé à écrire une demande d'aide hier, j'ai eu la lumière qui m'a fait trouver la solution au problème en me relisant ^^

Mais aujourd'hui, je suis confronté à un nouveau problème (il n'est pas compliqué je pense, mais le soucis c'est que je m'embrouille dans ma réflexion...)

Je suis en train de créer un script pour aller récupérer et copier des fichiers depuis différents chemins ( différents disques et liens réseau)
J'ai construis toute la partie, récupération des fichiers et check si le fichier existe bien (oui ça n'a rien d’impressionnant mais pour un débutant comme moi, je suis assez fier :p)
Je me retrouve donc avec une Array contenant les fichiers existants prêts à être copiés.
Ce que j'aimerais faire maintenant, c'est une fonction qui check si les fichiers sont existants dans le dossier de destination et qui les renomme si c'est le cas.
J'arrive à faire le test en reconstruisant le chemin de destination+nomdufichier (merci à StringRegExpReplace ^^) mais je bute sur la méthode à utiliser pour le renommage automatique si le fichier existe.
J'ai lu différents sujets proposant d'utiliser la fonction FileCopy(). J'ai essayé de l'adapter à mon cas, mais je me perds dans la marche à suivre...

Auriez vous une idée pour m'éclairer ?

Check si le fichier n'existe pas dans le dossier de destination.
Si oui, on le renomme.
Si non, on le copie.
Il faut aussi que je prenne en compte qu'il pourrait arriver que je demande de copier des fichiers ayant le même nom en même temps.

Merci par avance de votre aide
Modifié en dernier par 0xyg3n le mar. 19 mars 2013 15:12, modifié 1 fois.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..]Renommer un fichier s'il est existant

#2

Message par mikell »

Pour vérifier si le fichier existe, c'est

Code : Tout sélectionner

If FileExists($dossier & "\" & $fichier) Then ...
Pour le renommage voilà un exemple de petite fonction bien pratique (mais tu peux aussi utiliser FileMove)

Code : Tout sélectionner

$avant = "aaa.txt"
$apres = "bbb.txt"
$dossier = @desktopdir & "\dossier"  ; dossier contenant "aaa.txt" (chemin complet)

_Rename($avant, $apres, $dossier)

Func _Rename($oldname, $newname, $folder)
   RunWait(@ComSpec & ' /C REN "' & $oldname & '" "' & $newname & '"', $folder, @SW_HIDE)
EndFunc
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
0xyg3n
Niveau 2
Niveau 2
Messages : 25
Enregistré le : jeu. 07 mars 2013 22:43
Status : Hors ligne

Re: [..] Renommer un fichier s'il est existant

#3

Message par 0xyg3n »

Bonjour Mikell,

Tout d'abord merci de t'être penché sur mon problème.
C'est vrai que je n'ai même pas penser passer par une commande dos pour renommer le fichier ^^

Merci pour l'exemple de l'utilisation de celle-ci. Maintenant il me reste à voir comment l'adapter à mon cas.
Je regarderais ce soir à tête reposée.

Je reviendrais vous dire le résultat
lesolutionneur
Niveau 7
Niveau 7
Messages : 368
Enregistré le : ven. 09 déc. 2011 11:25
Status : Hors ligne

Re: [..]Renommer un fichier s'il est existant

#4

Message par lesolutionneur »

mikell a écrit :Pour vérifier si le fichier existe, c'est

Code : Tout sélectionner

If FileExists($dossier & "\" & $fichier) Then ...
Pour le renommage voilà un exemple de petite fonction bien pratique (mais tu peux aussi utiliser FileMove)

Code : Tout sélectionner

$avant = "aaa.txt"
$apres = "bbb.txt"
$dossier = @desktopdir & "\dossier"  ; dossier contenant "aaa.txt" (chemin complet)

_Rename($avant, $apres, $dossier)

Func _Rename($oldname, $newname, $folder)
   RunWait(@ComSpec & ' /C REN "' & $oldname & '" "' & $newname & '"', $folder, @SW_HIDE)
EndFunc
Quel est l'intérêt de passer par un commande DOS alors que Move fonctionne très bien ?

Tiens, j'ai fait une petite fonction si t'aimes pas FileMove :)

Code : Tout sélectionner

Func _FileRename($file, $newname)
    Local $szDrive, $szDir, $szFName, $szExt
     _PathSplit($file, $szDrive, $szDir, $szFName, $szExt)
     Return FileMove($file, $szDrive & $szDir & $newname)
EndFunc
 
Voilà comme ça c'est propre !

Exemple:

Code : Tout sélectionner

;Renommer c:\fichier.txt en Nabuchodonosor.jpg

$fichier = "c:\fichier.txt"
$nouveau_nom = "Nabuchodonosor.jpg"

$resultat = _FileRename("c:\fichier.txt", "Nabuchodonosor.jpg")

If $resultat Then
  MsgBox(0, "Résultat", "Fichier renommé avec succès !")
Else
  MsgBox(0, "Résultat", "Impossible de renommer le fichier, assurez vous qu'il existe et que vous avez la permission de le renommer !")
EndIf
 
N'est-ce pas plus propre et rapide ? :)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..]Renommer un fichier s'il est existant

#5

Message par mikell »

lesolutionneur a écrit :Quel est l'intérêt de passer par un commande DOS alors que Move fonctionne très bien ?
Dans 99 % des cas, aucun (et je te rappelle que j'ai mentionné FileMove)
Le 1 % restant c'est si par exemple tu avais envie de renommer "test.txt" en "TEST.txt"
0xyg3n a écrit :.. je bute sur la méthode à utiliser pour le renommage automatique si le fichier existe.
@0xyg3n
Puisque StringRegExpReplace te parle, tu peux faire une boucle For sur la liste de fichiers et utiliser ce type de code
► Afficher le texte
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Renommer un fichier s'il est existant

#6

Message par GaRydelaMer »

Bonsoir

je crois que vous oublié le principe de son scripte:

Il va chercher une liste de fichiers dans plusieurs endroits sur le réseaux et il veut ensuite copier cette liste dans un dossier sur son disque dur local.

Jusque la pas de problème mais il veut pas écraser les fichier existant, je pense qu'il suffit pas de renommer le fichier existant mais de lui donner un nouveau nom tant que le nouveau nom existe.

Code : Tout sélectionner

#include <File.au3>

;;; ici ton code qui créer la liste des fichiers à copier

; Déclaration des variables
Local $DestDir, $Name, $Count, $szDrive, $szDir, $szFName, $szExt

; Parcours du tableau contenant la liste des fichiers
; For $i = 0 To Ubound($aListe) ; si tu as pas le nombre dans la cellule 0 du tableau
For $i = 1 To $aListe[0]
    $Count = 0  ; on initialise le compteur
    ; on découpe la source en pour avoir le nom et l'extension du fichier source
    _PathSplit($aListe[$i], $szDrive, $szDir, $szFName, $szExt)
    ; on initialise la variable qui contiendra le nom du fichier de destination
    $Name =  $szFName
    ; On va faire une boucle tant que le nouveau nom du fichier dans la destination existe
    While FileExists($DestDir & "\" & $Name & "." & $szExt)
        $Count += 1 ; on incrémente le compteur pour créer un nouveau nom, tu peut utiliser ce que tu veux pour renommer le fichier
        $Name = $szFName & "_" & $Count
    WEnd
    ; on copie ton fichier source vers la nouvelle destination avec le nom qui va bien
    FileCopy($aListe[$i], $DestDir & "\" & $Name & "." & $szExt)
Next
 
Dans la boucle While tu peux aussi choisir de renommer le fichier existant avant de faire la copie.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Renommer un fichier s'il est existant

#7

Message par mikell »

Effectivement j'ai confondu :oops:
"fichiers existants" je pensais qu'il s'agissait de renommer ceux déjà présents dans la destination ^^
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
0xyg3n
Niveau 2
Niveau 2
Messages : 25
Enregistré le : jeu. 07 mars 2013 22:43
Status : Hors ligne

Re: [..] Renommer un fichier s'il est existant

#8

Message par 0xyg3n »

Bonjour,

Merci GarydelaMer pour ce bout de code.

Après réflexion et lecture des réponses et du forum, j'étais parti dans l'idée d'incrémenter une variable si FileExists me renvoyait quelque chose.

Mais j'ai pas eu le flash de passer par une boucle while, qui en lisant ton bout de code me semble tout à fait logique ^^

C'est exactement ce que je voulais !

Merci.

J'édite mon premier message pour mettre [R] dans le titre.
Répondre