Page 1 sur 1

Boucle pour comparer des fichiers

Posté : sam. 01 juil. 2017 15:24
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.

Re: Boucle pour comparer des fichiers

Posté : sam. 01 juil. 2017 15:48
par orax
Bienvenue sur le forum.

Pour parcourir les fichiers d'un dossier, regarde la fonction FileFindFirstFile.

Re: Boucle pour comparer des fichiers  

Posté : sam. 01 juil. 2017 16:06
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)")

Re: Boucle pour comparer des fichiers

Posté : sam. 01 juil. 2017 18:37
par Orcalyzer
Super ! Merci à vous deux pour vos réponses et d'avoir pris le temps de faire un exemple.