Boucle pour comparer des fichiers

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Orcalyzer
Niveau 1
Niveau 1
Messages : 2
Enregistré le : sam. 01 juil. 2017 15:11
Status : Hors ligne

Boucle pour comparer des fichiers

#1

Message par Orcalyzer »

Bonjour à tous,

Je souhaite réaliser une boucle qui permet de parcourir les fichiers d'un dossier afin de trier (supprimer) ceux qui sont orphelins.
Ex : fichier1.txt et fichier1.doc, on ne touche à rien. Si seul fichier2.txt existe (car fichier2.doc absent), alors on le supprime.

J'avais déjà réaliser ça en batch, qui donne ceci :

for %%a in (*.txt) do (
   if not exist "%%~na.doc" (
   del "%%a"
   echo Supression de %%a
   )
   echo Le fichier %%a n'est pas orphelin.
)

Après de multiple recherche, je ne trouve pas comment réaliser ceci sous autoit. Peut-être que la façon de faire est différente ? Une idée ?
J'ai vu qu'il y avait la fonction FileExists mais je sèche.

Merci à vous.
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: Boucle pour comparer des fichiers

#2

Message par orax »

Bienvenue sur le forum.

Pour parcourir les fichiers d'un dossier, regarde la fonction FileFindFirstFile.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: Boucle pour comparer des fichiers  

#3

Message par Tlem »

Comme j'avais quelques minutes, j'ai fait directement ce code. Ca fera gagner du temps à tous le monde. ;)

Code : Tout sélectionner

#include <File.au3>
$Chemin = "c:\Test"

; On crée un tableau avec la liste des fichier *.txt + chemin complet présents dans le répertoire.
; Si besoin de recherche récursive, alors utiliser _FileListToArrayRec
; $aFiles = _FileListToArray ($Chemin, "*.txt", 1, 1, 1, 0, 2)
$aFiles = _FileListToArray($Chemin, "*.txt", 1, 1)

; On vérifie que la recherche à été fructueuse, sinon => Erreur !!!
If not IsArray($aFiles) Then
	MsgBox(16, "Erreur", "Aucun fichier .txt trouvé !")
	Exit
EndIf


; On déclare quelques variables qui seront utilisées dans la suite du code.
Local $aPathSplit, $sDrive = "", $sDir = "", $sFilename = "", $sExtension = "", $count = 0

;~ ; On lit le tableau du début à la fin (de la case 1 à la taille du tableau  1)
For $i = 1 to UBound($aFiles) - 1
	; On décompose les élément de la "cellule" $aFiles[$i] en chemin + nom de fichier dans un autre tableau :
	$aPathSplit = _PathSplit($aFiles[$i], $sDrive, $sDir, $sFilename, $sExtension)

	; on utilise les éléments 1, 2, 3 du tableau pour vérifier si :
	; Si le fichier \chemin\xxx.doc n'existe pas alors on supprime \chemin\xxx.txt
	If Not FileExists($aPathSplit[1] & $aPathSplit[2] &$aPathSplit[3] & ".doc") Then
		FileDelete($aFiles[$i])
		$count += 1  ; On incrémente le compteur à chaque suppression.
	EndIf
Next

MsgBox(64, "Terminé", "Opération terminée. " & $count & " fichier(s) supprimé(s)")
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Orcalyzer
Niveau 1
Niveau 1
Messages : 2
Enregistré le : sam. 01 juil. 2017 15:11
Status : Hors ligne

Re: Boucle pour comparer des fichiers

#4

Message par Orcalyzer »

Super ! Merci à vous deux pour vos réponses et d'avoir pris le temps de faire un exemple.
Répondre