FileOpenDialog - copier les fichiers sélectionnés dans un nouveau dossier
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
FileOpenDialog - copier les fichiers sélectionnés dans un nouveau dossier
Bonjour,
FileOpenDialog permet de sélectionner plusieurs fichiers dans une fenêtre Explorateur de Windows qu'il ouvre et retourne, dans une nouvelle fenêtre, la liste des fichiers sélectionnés.
Question: Existe-t-il une fonction permettant de copier cette liste dans un nouveau dossier ?
Merci
FileOpenDialog permet de sélectionner plusieurs fichiers dans une fenêtre Explorateur de Windows qu'il ouvre et retourne, dans une nouvelle fenêtre, la liste des fichiers sélectionnés.
Question: Existe-t-il une fonction permettant de copier cette liste dans un nouveau dossier ?
Merci
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: FileOpenDialog - copier les fichiers sélectionnés dans un nouveau dossier
FileOpenDialog quand on sélectionne plusieurs fichiers retourne : "Directory|file1|file2|...".
Donc StringSplit($resultat, "|") et boucle sur l'array obtenue avec des FileCopy
Donc StringSplit($resultat, "|") et boucle sur l'array obtenue avec des FileCopy
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Re: FileOpenDialog - copier les fichiers sélectionnés dans un nouveau dossier
Merci pour cette réponse rapide que mes connaissances ne me permettent pas d'apprécier. Je vais donc continuer à fouiller.
- walkson
- Modérateur
- Messages : 1036
- Enregistré le : ven. 12 août 2011 19:49
- Localisation : Hurepoix
- Status : Hors ligne
Re: FileOpenDialog - copier les fichiers sélectionnés dans un nouveau dossier
Bonjour,
Je pense que vous souhaitez le chemin complet des fichiers sélectionnés
Explication dans le code
Pour avoir de l'aide, sélectionnez dans Scite un mot (ex: For) et tapez F1
Je pense que vous souhaitez le chemin complet des fichiers sélectionnés
Explication dans le code
#include <FileConstants.au3>
$hFile = @ScriptDir & "\Dossier\chemin.txt"
$rep = FileOpenDialog("choisir", @DesktopDir,"tout(*.*)", BitOR($FD_MULTISELECT, $FD_PATHMUSTEXIST, $FD_FILEMUSTEXIST))
;multiple selections are "Directory|file1|file2|...".
If Not @error Then ;pas d'annulation
$hSplit = StringSplit($rep, "|");on découpe à chaque | pour obtenir un array (tableau)
;$hSplit[0] première ligne du tableau est le nombre d'éléments dans le tableau
;$hSplit[1] deuxième ligne est le dossier
;$hSplit[n] les autres lignes sont les fichiers
Local $text
For $i = 2 To $hSplit[0] ; on boucle sur l'array, $i est la ligne
$text &= $hSplit[1] &"\"& $hSplit[$i] & @CRLF ; dans la variable $text, le chemin ($hSplit[1]), puis le fichier, puis retour à la ligne, cumulé à chaque ligne
Next
$hFileopen = FileOpen($hFile, $FO_OVERWRITE + $FO_CREATEPATH ); création du chemin et fichiers en overwrite
FileWrite($hFileopen, $text)
FileClose($hFileopen)
EndIf
$hFile = @ScriptDir & "\Dossier\chemin.txt"
$rep = FileOpenDialog("choisir", @DesktopDir,"tout(*.*)", BitOR($FD_MULTISELECT, $FD_PATHMUSTEXIST, $FD_FILEMUSTEXIST))
;multiple selections are "Directory|file1|file2|...".
If Not @error Then ;pas d'annulation
$hSplit = StringSplit($rep, "|");on découpe à chaque | pour obtenir un array (tableau)
;$hSplit[0] première ligne du tableau est le nombre d'éléments dans le tableau
;$hSplit[1] deuxième ligne est le dossier
;$hSplit[n] les autres lignes sont les fichiers
Local $text
For $i = 2 To $hSplit[0] ; on boucle sur l'array, $i est la ligne
$text &= $hSplit[1] &"\"& $hSplit[$i] & @CRLF ; dans la variable $text, le chemin ($hSplit[1]), puis le fichier, puis retour à la ligne, cumulé à chaque ligne
Next
$hFileopen = FileOpen($hFile, $FO_OVERWRITE + $FO_CREATEPATH ); création du chemin et fichiers en overwrite
FileWrite($hFileopen, $text)
FileClose($hFileopen)
EndIf
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: FileOpenDialog - copier les fichiers sélectionnés dans un nouveau dossier
Désolé pour ma réponse excessivement succinte
J'ai cru comprendre qu'il s'agissait de copier des fichiers dans un autre dossier, donc je me permets de compléter la réponse de walkson
NB : le fichier d'aide est le meilleur ami (AutoIt > Function Reference > File, Directory and Disk Management)

J'ai cru comprendre qu'il s'agissait de copier des fichiers dans un autre dossier, donc je me permets de compléter la réponse de walkson
NB : le fichier d'aide est le meilleur ami (AutoIt > Function Reference > File, Directory and Disk Management)
#include <FileConstants.au3>
#Include <Array.au3> ; pour _ArrayDisplay
$rep = FileOpenDialog("choisir", @DesktopDir,"tout(*.*)", BitOR($FD_MULTISELECT, $FD_PATHMUSTEXIST, $FD_FILEMUSTEXIST))
If Not @error Then
$hSplit = StringSplit($rep, "|")
; _ArrayDisplay($hSplit) ; juste pour visualiser le truc
EndIf
$dossier_dest = @desktopdir & "\dossier\"
For $i = 2 To $hSplit[0] ; boucle sur l'array
$file_source = $hSplit[1] & "\" & $hSplit[$i]
$file_dest = $dossier_dest & $hSplit[$i] ; on peut (ou pas) garder le même nom de fichier
FileCopy($file_source, $file_dest, $FC_OVERWRITE + $FC_CREATEPATH)
Next
#Include <Array.au3> ; pour _ArrayDisplay
$rep = FileOpenDialog("choisir", @DesktopDir,"tout(*.*)", BitOR($FD_MULTISELECT, $FD_PATHMUSTEXIST, $FD_FILEMUSTEXIST))
If Not @error Then
$hSplit = StringSplit($rep, "|")
; _ArrayDisplay($hSplit) ; juste pour visualiser le truc
EndIf
$dossier_dest = @desktopdir & "\dossier\"
For $i = 2 To $hSplit[0] ; boucle sur l'array
$file_source = $hSplit[1] & "\" & $hSplit[$i]
$file_dest = $dossier_dest & $hSplit[$i] ; on peut (ou pas) garder le même nom de fichier
FileCopy($file_source, $file_dest, $FC_OVERWRITE + $FC_CREATEPATH)
Next
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Re: FileOpenDialog - copier les fichiers sélectionnés dans un nouveau dossier
Merci Mikell, merci Walkson,
Je vais tenter de décortiquer tout ça !
Je vais tenter de décortiquer tout ça !

Re: FileOpenDialog - copier les fichiers sélectionnés dans un nouveau dossier
Bonjour à tous!
Après de nombreuses heures de bricolage, à assembler des bouts de codes glanés ici et là, j'avais obtenu un résultat qui me satisfaisait. Aujourd'hui, rien ne va plus... Est-ce l'environnement W7 64bits !?
L'objet du script est le suivant :
;Créer un répertoire sur le bureau , C:\Desktop\Repertoire
;Sélectionner des fichiers dans les répertoires de l'arborescence Windows et les copier dans le répertoire créé précédemment.
;Sélectionner tous les fichiers nouvellement collés ("^a") , lancer leur lecture avec l'application Windows par défaut ("{Enter}") en plein écran ("{f11}")
;éventuellement, effacer le contenu du répertoire de lecture précédemment créé, après la lecture de tous les fichiers.
Voici donc le script en question (merci pour votre indulgence!)
Merci pour votre aide éventuelle ! le script bloque avant l'affichage du catalogue qui est bien créé et rempli des fichiers sélectionnés.
Après de nombreuses heures de bricolage, à assembler des bouts de codes glanés ici et là, j'avais obtenu un résultat qui me satisfaisait. Aujourd'hui, rien ne va plus... Est-ce l'environnement W7 64bits !?
L'objet du script est le suivant :
;Créer un répertoire sur le bureau , C:\Desktop\Repertoire
;Sélectionner des fichiers dans les répertoires de l'arborescence Windows et les copier dans le répertoire créé précédemment.
;Sélectionner tous les fichiers nouvellement collés ("^a") , lancer leur lecture avec l'application Windows par défaut ("{Enter}") en plein écran ("{f11}")
;éventuellement, effacer le contenu du répertoire de lecture précédemment créé, après la lecture de tous les fichiers.
Voici donc le script en question (merci pour votre indulgence!)
#include <FileConstants.au3>
#include <MsgBoxConstants.au3>
$dir = "C:\Desktop\CATALOGUE" ; Emplacement des fichiers
;$sFilePath = "C:\Desktop\CATALOGUE"
Exemple()
Func Exemple()
;Création d'un répertoire
; Crée une constante de portée Local avec le répertoire.
Local Const $sFilePath = "C:\Desktop\CATALOGUE"
Local $iFileExists = FileExists($sFilePath)
; Affiche si le fichier existe ou pas.
If $iFileExists Then
MsgBox($MB_SYSTEMMODAL, "", "Le répertoire existe.") ;& @CRLF & "FileExist a retourné: " & $iFileExists)
Else
MsgBox($MB_SYSTEMMODAL, "", "Le répertoire n'existe pas.") ;& @CRLF & "FileExist a retourné: " & $iFileExists)
EndIf
; Crée le répertoire.
DirCreate($sFilePath)
; Affiche un message sur la création du répertoire.
MsgBox($mb_systemmodal,"","Le répertoire a été créé.")
;Sélectionner des fichiers dans l'arborescence Windows et les copier dans le répertoire.
; Crée une constante locale avec le message à afficher dans FileOpenDialog.
Local Const $sMessage = "Appuyez sur Ctrl ou Shift pour choisir plusieurs fichiers."
Local $sFileOpenDialog = FileOpenDialog($sMessage, @WindowsDir & "\", "Images (*.jpg;*.bmp)| Videos (*.avi;*.mpg)", $FD_FILEMUSTEXIST + $FD_MULTISELECT)
; Vérifiez quel type de retour nous obtenons de la fonction.
If @error Then ; Echec complet
MsgBox($MB_SYSTEMMODAL, "Erreur", "Echec de la sélection")
Else ; Vérifiez les retours multiples qui auront des délimiteurs.
If StringInStr($sFileOpenDialog, "|") Then
;Plusieurs fichiers sélectionnés, il faut donc créer un tableau.
$aFileSplit = StringSplit($sFileOpenDialog, "|")
; Et puis boucler dans le tableau.
For $i = 2 To $aFileSplit[0] ; Note commençant à [2],car [0] est le compte et [1] le chemin.
; Vous devez créer le chemin complet à chaque passage.
FileCopy($aFileSplit[1] & "\" & $aFileSplit[$i], $sFilePath)
;Sleep(100)
Next
Else
; Un seul fichier sélectionné, alors copier immédiatement.
FileCopy($sFileOpenDialog, $sFilePath)
EndIf
EndIf
WinActivate("CATALOGUE","")
;Send("^a")
;Send("{ENTER}")
EndFunc
#include <MsgBoxConstants.au3>
$dir = "C:\Desktop\CATALOGUE" ; Emplacement des fichiers
;$sFilePath = "C:\Desktop\CATALOGUE"
Exemple()
Func Exemple()
;Création d'un répertoire
; Crée une constante de portée Local avec le répertoire.
Local Const $sFilePath = "C:\Desktop\CATALOGUE"
Local $iFileExists = FileExists($sFilePath)
; Affiche si le fichier existe ou pas.
If $iFileExists Then
MsgBox($MB_SYSTEMMODAL, "", "Le répertoire existe.") ;& @CRLF & "FileExist a retourné: " & $iFileExists)
Else
MsgBox($MB_SYSTEMMODAL, "", "Le répertoire n'existe pas.") ;& @CRLF & "FileExist a retourné: " & $iFileExists)
EndIf
; Crée le répertoire.
DirCreate($sFilePath)
; Affiche un message sur la création du répertoire.
MsgBox($mb_systemmodal,"","Le répertoire a été créé.")
;Sélectionner des fichiers dans l'arborescence Windows et les copier dans le répertoire.
; Crée une constante locale avec le message à afficher dans FileOpenDialog.
Local Const $sMessage = "Appuyez sur Ctrl ou Shift pour choisir plusieurs fichiers."
Local $sFileOpenDialog = FileOpenDialog($sMessage, @WindowsDir & "\", "Images (*.jpg;*.bmp)| Videos (*.avi;*.mpg)", $FD_FILEMUSTEXIST + $FD_MULTISELECT)
; Vérifiez quel type de retour nous obtenons de la fonction.
If @error Then ; Echec complet
MsgBox($MB_SYSTEMMODAL, "Erreur", "Echec de la sélection")
Else ; Vérifiez les retours multiples qui auront des délimiteurs.
If StringInStr($sFileOpenDialog, "|") Then
;Plusieurs fichiers sélectionnés, il faut donc créer un tableau.
$aFileSplit = StringSplit($sFileOpenDialog, "|")
; Et puis boucler dans le tableau.
For $i = 2 To $aFileSplit[0] ; Note commençant à [2],car [0] est le compte et [1] le chemin.
; Vous devez créer le chemin complet à chaque passage.
FileCopy($aFileSplit[1] & "\" & $aFileSplit[$i], $sFilePath)
;Sleep(100)
Next
Else
; Un seul fichier sélectionné, alors copier immédiatement.
FileCopy($sFileOpenDialog, $sFilePath)
EndIf
EndIf
WinActivate("CATALOGUE","")
;Send("^a")
;Send("{ENTER}")
EndFunc
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: FileOpenDialog - copier les fichiers sélectionnés dans un nouveau dossier
Il faudrait utiliser la fonction ShellExecute (ou ShellExecuteWait ). Si on lui fournit un nom de dossier, elle ouvre l'explorateur Windows et affiche le dossier ; si c'est un nom de fichier, elle ouvre automatiquement ce fichier avec l'application par défaut. Dans ce cas, il suffit de d'abord lister les fichiers et ensuite les passer successivement à ShellExecute avec une boucle :
#include <File.au3>
#Include <Array.au3>
$dir = "C:\Desktop\CATALOGUE"
$list = _FileListToArray($dir, "*", $FLTA_FILES, True)
; _ArrayDisplay($list) ; juste pour visualiser le truc
For $i = 1 to $list[0]
ShellExecuteWait($list[$i])
Next
#Include <Array.au3>
$dir = "C:\Desktop\CATALOGUE"
$list = _FileListToArray($dir, "*", $FLTA_FILES, True)
; _ArrayDisplay($list) ; juste pour visualiser le truc
For $i = 1 to $list[0]
ShellExecuteWait($list[$i])
Next
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Re: FileOpenDialog - copier les fichiers sélectionnés dans un nouveau dossier
Merci Mikell,
Entre temps, J'ai essayé
ShellExecute($dir)
WinActivate("CATALOGUE","")
Sleep(100)
Send("^a")
Send("{ENTER}")
et ça fonctionne!
Par contre, je ne sais pas comment mettre le focus sur la fenêtre de l'application Windows , Visionneuse de Windows, pour lui envoyer Send("{f11}") et lancer le diaporama, car le nom de la fenêtre est variable du style "nom de fichier-Visionneuse de Windows". J'ai essayé avec " *.jpg-Visionneuse de Windows" mais ça ne fonctionne pas.
Entre temps, J'ai essayé
ShellExecute($dir)
WinActivate("CATALOGUE","")
Sleep(100)
Send("^a")
Send("{ENTER}")
et ça fonctionne!
Par contre, je ne sais pas comment mettre le focus sur la fenêtre de l'application Windows , Visionneuse de Windows, pour lui envoyer Send("{f11}") et lancer le diaporama, car le nom de la fenêtre est variable du style "nom de fichier-Visionneuse de Windows". J'ai essayé avec " *.jpg-Visionneuse de Windows" mais ça ne fonctionne pas.
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: FileOpenDialog - copier les fichiers sélectionnés dans un nouveau dossier
ça c'est pas compliqué, les fonctions Win* peuvent marcher avec juste une partie du titre si on définit d'abord l'option qui va bien
; à mettre en tête de script. 2 = match substring, -2 = le même mais case insensitive
Opt("WinTitleMatchMode", -2)
;...
WinActivate("visionneuse") ; et ça marche
Opt("WinTitleMatchMode", -2)
;...
WinActivate("visionneuse") ; et ça marche
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Re: FileOpenDialog - copier les fichiers sélectionnés dans un nouveau dossier
Ok, merci beaucoup!
le problème c'est que f11 passe les deux dernières fenêtres en plein écran (c'est bien le rôle de cette touche) mais ne lance pas le diaporama, comme c'est le cas, en manuel, si le focus est sur le fenêtre de la Visionneuse.
Commande qu'il est toujours possible d'exécuter manuellement !
C'était juste pour le fun !
Merci pour tous vos conseils.
(Jolie région les Cévennes!)
le problème c'est que f11 passe les deux dernières fenêtres en plein écran (c'est bien le rôle de cette touche) mais ne lance pas le diaporama, comme c'est le cas, en manuel, si le focus est sur le fenêtre de la Visionneuse.
Commande qu'il est toujours possible d'exécuter manuellement !

C'était juste pour le fun !
Merci pour tous vos conseils.
(Jolie région les Cévennes!)