Page 1 sur 1
Aide pour Copier un fichier selectionné dans un répertoire
Posté : jeu. 08 févr. 2018 19:10
par Maxbruver
slt a tous,
Debutant dans le merveilleux monde d'autoit,j aurais besoin d'une petite aide concernant un script autoit
je cherche a sélectionner un fichier puis avec un raccourci clavier(quelconque)le déplacer dans un répertoire fixe.
si quelqu'un peut me venir en aide ,je pense que le script ne doit pas être trop compliqué.
merci de votre aide
Re: Aide pour Copier un fichier selectionné dans un répertoire
Posté : ven. 09 févr. 2018 15:38
par walkson
Bonjour,
FileMove ( "source", "dest" [, flag = 0] )
Regardez les exemples dans l'aide (F1)
RMQ: ici on déplace ! on ne copie pas !

Pour sélectionner le fichier
FileOpenDialog()
Pour sélectionner le dossier de destination
FileSelectFolder()
Mais si vous voulez vraiment copier il y a
FileCopy ( "source", "dest" [, flag = 0] )

et pour le raccourci clavier, sincèrement, je n'en vois pas l’intérêt !
Re: Aide pour Copier un fichier selectionné dans un répertoire
Posté : ven. 09 févr. 2018 18:56
par Maxbruver

merci pour ta réponse,en revanche il me faudrait simplement convertir cette ligne d un script bat en script autoit,car elle fonctionne en batch mais pas réussi en autoit-mon but n est pas d ouvrir une boite de dialogue(fileopendiag)mais directement selectionner un fichier a la souris puis en executant le scrit ,le fichier se deplacer dans le dossier prealablement designé dans le script- simple.... sauf pour moi
move %1 c:\test (le %1 est utilisé pour déplacer le fichier sélectionné a la souris)
merci a celui qui pourra m aider
Re: Aide pour Copier un fichier selectionné dans un répertoire
Posté : ven. 09 févr. 2018 20:47
par walkson
Soyez un peu plus précis si vous souhaitez une réponse !
move %1 c:\test
Je doute que le code soit entier !!!
Je ne connais pas grand chose en batch mais Tlem (le boss du forum) intervient sur d'autres forums dont ce type de problème.
Avec un code correcte et entier publié dans votre commentaire, vous aurez une réponse de Tlem ou d'autres !!!!
Sinon, en autoit (pur), il y a des solutions sympas et efficaces

Re: Aide pour Copier un fichier selectionné dans un répertoire
Posté : ven. 09 févr. 2018 22:11
par Tlem
Bonsoir.
En script AutoIt, il suffit de gérer l'argument du Drag And Drop.
Ce sera moins épuré qu'avec le batch mais c'est pas beaucoup plus compliqué.
Des exemples de scripts utilisant un argument existent déjà sur le forum. Il suffit de s'en inspirer. Cherchez sur le forum ou dans l'aide $cmdline[].
Inconvénients : Il faudra que le script soit compilé pour fonctionner de manière simple.
Envoyé de mon appareil mobile en utilisant Tapatalk
Re: Aide pour Copier un fichier selectionné dans un répertoire
Posté : ven. 09 févr. 2018 22:32
par mikell
Re: Aide pour Copier un fichier selectionné dans un répertoire
Posté : sam. 10 févr. 2018 11:12
par Maxbruver
merci mikell
on s'approche de ce que je recherche,sauf que ce script creé un fichier test quelque soit le nom du fichier selectionné par ctrl x
mon but serait de deplacer le fichier selectionné par la souris dans un répertoire "test".(ce qui reviendrait a faire un ctrl c,ctrl v dans un repertoire donné mais par un raccourci clavier)
je continue a chercher,si tu as une petite idéé pour mon script je suis preneur
merci
Re: Aide pour Copier un fichier selectionné dans un répertoire
Posté : sam. 10 févr. 2018 11:33
par Maxbruver
c bon ça fonctionne ! merci a tous pour votre aide
Re: Aide pour Copier un fichier selectionné dans un répertoire
Posté : sam. 10 févr. 2018 11:39
par Maxbruver
ça fonctionne.... en revanche je ne peut déplacer qu'un seul fichier a la fois,avez vous une idée pour faire une sélection multiple pour pouvoir déplacer un ensemble de fichiers dans un répertoire?
merci
Re: Aide pour Copier un fichier selectionné dans un répertoire
Posté : sam. 10 févr. 2018 19:14
par walkson
Bonsoir,
J'ai retrouvé mon code et l'ai mis à jour. Il fonctionne sous Win 7 (et supérieur, je pense) et doit être compilé pour fonctionner
Double-cliquez sur MOVE-3-0.exe et une fenêtre s'ouvre. 3 choix:
- raccourci sur le bureau (on glisse les fichiers sur le raccourci)
- raccourci sur Envoyer vers (sélection des fichiers et clic droit sur Envoyer vers puis MOVE)
- raccourci clic droit (sélection des fichiers et clic droit sur MOVE) (Create an entry in the shell contextmenu)
On peut aussi glisser les fichiers sur le Exe
Le programme déplace tous les fichiers sélectionnés dans le dossier cible à l'exception des raccourcis en une manipe.
Le chemin du dossier destination est à mettre à jour. Par contre, le nom de l'exécutable ne doit pas être changé !!! et un icon pour l'exécutable est fortement conseillé (lors de la compilation)
On peut aussi défaire tous les raccourcis.
Ce code reprend l'idée de Tlem et a été inspiré par
viewtopic.php?f=3&t=6533.
Il a l'avantage de ne fonctionner que quand on s'en sert.
;https://autoitscript.fr/forum/viewtopic.php?f=3&t=6533#Region ;**** Directives created by AutoIt3Wrapper_GUI ****#AutoIt3Wrapper_Icon=..\..\..\Program Files\AutoIt3\Examples\Helpfile\Extras\Arrow.ico#AutoIt3Wrapper_Outfile=MOVE-3-0.exe ;ne pas modifier !!!#AutoIt3Wrapper_Res_Comment=Déplace les fichiers#AutoIt3Wrapper_Res_Description=Déplace les fichiers#AutoIt3Wrapper_Res_Fileversion=0.0.3.1#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****#include <GUIConstantsEx.au3>#include <StaticConstants.au3>#include
<Array
.au3>Global $var, $resum, $idIf @Compiled = 0 Then Exit MsgBox(0,"Erreur","Programme non compilé")If @OSBuild < 7601 Then Exit MsgBox(0,"Erreur","L'OS est trop ancien") ;Win 7 https://en.wikipedia.org/wiki/List_of_Microsoft_Windows_versionsGlobal $pathDest = @HomeDrive & "\Archives" ;mettre à jourIf FileExists($pathDest) = 0 Then DirCreate($pathDest)If $CmdLine[0] Then For $i = 1 To $CmdLine[0] ToolTip("Déplacement " & $CmdLine[$i],@DesktopWidth - 400,@DesktopHeight - 100,"MOVE",0,1) $che = StringSplit($CmdLine[$i],"\") $nom = $che[$che[0]] If StringRight($nom,3) <> "lnk" Then ;ne prend pas les raccourcis FileMove($CmdLine[$i],$pathDest,8) EndIf If FileExists($CmdLine[$i]) = 1 Then MsgBox(0,"ERREUR","Pas de déplacement " & $CmdLine[$i]) NextSend("{F5}");actualiserToolTip("")Else Form
()EndIfFunc Form
()#Region ### START Koda GUI section ### Form=Global $Form1 = GUICreate("Configuration", 255, 279, -1, -1)Global $Checkbox1 = GUICtrlCreateCheckbox("Raccourci bureau", 10, 37, 233, 25)Global $Checkbox2 = GUICtrlCreateCheckbox("Raccourci envoyer vers", 10, 67, 233, 25)Global $Checkbox3 = GUICtrlCreateCheckbox("Raccourci clic droit (shell)", 10, 96, 233, 25)Global $Label1 = GUICtrlCreateLabel("Installation", 8, 8, 236, 25, $SS_CENTER)GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")Global $Label2 = GUICtrlCreateLabel("Désinstallation", 10, 129, 236, 25, $SS_CENTER)GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")Global $Checkbox4 = GUICtrlCreateCheckbox("Supprime Raccourci bureau", 12, 158, 233, 25)Global $Checkbox5 = GUICtrlCreateCheckbox("Supprime Raccourci envoyer vers", 12, 188, 233, 25)Global $Checkbox6 = GUICtrlCreateCheckbox("Supprime Raccourci clic droit (shell)", 12, 217, 233, 25)Global $Button1 = GUICtrlCreateButton("Validez les choix", 46, 248, 163, 25)GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")GUISetState(@SW_SHOW)#EndRegion ### END Koda GUI section ###While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Checkbox1 _IsChecked
($Checkbox1, $Checkbox4) Case $Checkbox2 _IsChecked
($Checkbox2, $Checkbox5) Case $Checkbox3 _IsChecked
($Checkbox3, $Checkbox6) Case $Checkbox4 _IsChecked
($Checkbox4, $Checkbox1) Case $Checkbox5 _IsChecked
($Checkbox5, $Checkbox2) Case $Checkbox6 _IsChecked
($Checkbox6, $Checkbox3) Case $Button1 verif
() EndSwitchWEndEndFunc ; Form()Func _IsChecked
($aControlID, $bControlID) If BitAND(GUICtrlRead($aControlID), $GUI_CHECKED) = $GUI_CHECKED Then GUICtrlSetState($bControlID,$GUI_UNCHECKED) EndIfEndFunc ;==>_IsCheckedFunc verif
() Local $Checkbox For $i = 1 to 10 $resum = $Checkbox & $i If BitAND(GUICtrlRead($resum), $GUI_CHECKED) = $GUI_CHECKED Then Switch $resum Case $Checkbox1 ;bureau If Not FileExists(@DesktopDir & "\MOVE.lnk") Then FileCreateShortcut(@ScriptDir & "\MOVE-3-0.exe",@DesktopDir & "\MOVE.lnk", @ScriptDir & "\MOVE-3-0.exe") $var = 1 Else $var = 0 EndIf $id = $i validation
() Case $Checkbox2 ;sento If Not FileExists(@AppDataDir & "\Microsoft\Windows\SendTo\MOVE.lnk") Then FileCreateShortcut(@ScriptDir & "\MOVE-3-0.exe",@AppDataDir & "\Microsoft\Windows\SendTo\MOVE.lnk", @ScriptDir & "\MOVE-3-0.exe") $var = 1 Else $var = 0 EndIf $id = $i validation
() Case $Checkbox3 ;shell _ShellAll_Install
('MOVE','MOVE-3-0.exe',@ScriptDir & "\MOVE-3-0.exe", @ScriptDir & "\MOVE-3-0.exe") $var = RegRead("HKEY_CLASSES_ROOT\*\shell\MOVE-3-0\command", "") If $var > "" Then $var = 1 $id = $i validation
() ;>>>>>>>>> uninstall Case $Checkbox4 ;bureau If FileExists(@DesktopDir & "\MOVE.lnk") Then FileDelete(@DesktopDir & "\MOVE.lnk") $var = 1 Else $var = 0 EndIf $id = $i validation
() Case $Checkbox5 ;sendto If FileExists(@AppDataDir & "\Microsoft\Windows\SendTo\MOVE.lnk") Then FileDelete(@AppDataDir & "\Microsoft\Windows\SendTo\MOVE.lnk") $var = 1 Else $var = 0 EndIf $id = $i validation
() Case $Checkbox6 ;shell _ShellAll_Uninstall
('MOVE-3-0.exe') $var = RegRead("HKEY_CLASSES_ROOT\*\shell\MOVE-3-0\command", "") If $var = "" Then $var = 1 $id = $i validation
() EndSwitch EndIf NextGUICtrlSetState($Checkbox1,$GUI_UNCHECKED)GUICtrlSetState($Checkbox2,$GUI_UNCHECKED)GUICtrlSetState($Checkbox3,$GUI_UNCHECKED)GUICtrlSetState($Checkbox4,$GUI_UNCHECKED)GUICtrlSetState($Checkbox5,$GUI_UNCHECKED)GUICtrlSetState($Checkbox6,$GUI_UNCHECKED)EndFuncFunc validation
() If $var = 1 Then ToolTip("SUCCES " & ControlGetText("","",$id),150,150,"INFO",1) Sleep(3000) ToolTip("") Else ToolTip("ECHEC " & ControlGetText("","",$id),150,150,"INFO",2) Sleep(3000) ToolTip("") EndIf$var = 0EndFunc;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<; #INDEX# =======================================================================================================================; Title .........: _ShellAll; AutoIt Version : v3.2.12.1 or higher; Language ......: English; Description ...: Create an entry in the shell contextmenu when selecting a file and folder, includes the program icon as well.; Note ..........:; Author(s) .....: guinness; Remarks .......: Special thanks to KaFu for EnumRegKeys2Array() which I used as inspiration for enumerating the Registry Keys.; ===============================================================================================================================; #INCLUDES# =========================================================================================================; None; #GLOBAL VARIABLES# =================================================================================================; None; #CURRENT# =====================================================================================================================; _ShellAll_Install: Creates an entry in the 'All Users/Current Users' registry for displaying a program entry in the shell contextmenu, but only displays when selecting a file and folder.; _ShellAll_Uninstall: Deletes an entry in the 'All Users/Current Users' registry for displaying a program entry in the shell contextmenu.; ===============================================================================================================================; #INTERNAL_USE_ONLY#============================================================================================================; __ShellAll_RegistryGet ......; Retrieve an array of registry entries for a specific key.; ===============================================================================================================================; #FUNCTION# ====================================================================================================================; Name ..........: _ShellAll_Install; Description ...: Creates an entry in the 'All Users/Current Users' registry for displaying a program entry in the shell contextmenu, but only displays when selecting a file and folder.; Syntax ........: _ShellAll_Install($sText[, $sName = @ScriptName[, $sFilePath = @ScriptFullPath[, $sIconPath = @ScriptFullPath[,; $iIcon = 0[, $fAllUsers = False[, $fExtended = False]]]]]]); Parameters ....: $sText - Text to be shown in the contextmenu.; $sName - [optional] Name of the program. Default is @ScriptName.; $sFilePath - [optional] Location of the program executable. Default is @ScriptFullPath.; $sIconPath - [optional] Location of the icon e.g. program executable or dll file. Default is @ScriptFullPath.; $iIcon - [optional] Index of icon to be used. Default is 0.; $fAllUsers - [optional] Add to Current Users (False) or All Users (True) Default is False.; $fExtended - [optional] Show in the Extended contextmenu using Shift + Right click. Default is False.; Return values .: Success - RegWrite() Return code.; Failure - none; Author ........: guinness; Example .......: Yes; ===============================================================================================================================Func _ShellAll_Install
($sText, $sName = @ScriptName, $sFilePath = @ScriptFullPath, $sIconPath = @ScriptFullPath, $iIcon = 0, $fAllUsers = False, $fExtended = False) Local $aArray[3] = [2, '*', 'Directory'], $i64Bit = '' If $iIcon = Default Then $iIcon = 0 EndIf If $sFilePath = Default Then $sFilePath = @ScriptFullPath EndIf If $sIconPath = Default Then $sIconPath = @ScriptFullPath EndIf If $sName = Default Then $sName = @ScriptName EndIf If @OSArch = 'X64' Then $i64Bit = '64' EndIf For $i = 1 To $aArray[0] If $fAllUsers Then $aArray[$i] = 'HKEY_LOCAL_MACHINE' & $i64Bit & '\SOFTWARE\Classes\' & $aArray[$i] & '\shell\' Else $aArray[$i] = 'HKEY_CURRENT_USER' & $i64Bit & '\SOFTWARE\Classes\' & $aArray[$i] & '\shell\' EndIf Next $sName = StringRegExpReplace($sName, '\.[^\.\\/]*$', '') If StringStripWS($sName, 8) = '' Or FileExists($sFilePath) = 0 Then Return SetError(1, 0, 0) EndIf _ShellAll_Uninstall
($sName, $fAllUsers) For $i = 1 To $aArray[0] RegWrite($aArray[$i] & $sName, '', 'REG_SZ', $sText) RegWrite($aArray[$i] & $sName, 'Icon', 'REG_EXPAND_SZ', $sIconPath & ',' & $iIcon) RegWrite($aArray[$i] & $sName & '\command', '', 'REG_SZ', '"' & $sFilePath & '" "%1"') If $fExtended Then RegWrite($aArray[$i], 'Extended', 'REG_SZ', '') EndIf Next Return SetError(@error, 0, @error)EndFunc ;==>_ShellAll_Install; #FUNCTION# ====================================================================================================================; Name ..........: _ShellAll_Uninstall; Description ...: Deletes an entry in the 'All Users/Current Users' registry for displaying a program entry in the shell contextmenu.; Syntax ........: _ShellAll_Uninstall([$sName = @ScriptName[, $fAllUsers = False]]); Parameters ....: $sName - [optional] Name of the Program. Default is @ScriptName.; $fAllUsers - [optional] Was it added to Current Users (False) or All Users (True) Default is False.; Return values .: Success - Returns 2D Array of registry entries.; Failure - Returns 0 and sets @error to non-zero.; Author ........: guinness; Example .......: Yes; ===============================================================================================================================Func _ShellAll_Uninstall
($sName = @ScriptName, $fAllUsers = False) Local $aArray[3] = [2, '*', 'Directory'], $i64Bit = '' If $sName = Default Then $sName = @ScriptName EndIf If @OSArch = 'X64' Then $i64Bit = '64' EndIf For $i = 1 To $aArray[0] If $fAllUsers Then $aArray[$i] = 'HKEY_LOCAL_MACHINE' & $i64Bit & '\SOFTWARE\Classes\' & $aArray[$i] & '\shell\' Else $aArray[$i] = 'HKEY_CURRENT_USER' & $i64Bit & '\SOFTWARE\Classes\' & $aArray[$i] & '\shell\' EndIf Next $sName = StringRegExpReplace($sName, '\.[^\.\\/]*$', '') If StringStripWS($sName, 8) = '' Then Return SetError(1, 0, 0) EndIf Local $aFinal[1][5] = [[0, 5]], $aReturn = 0, $sDelete = '' For $i = 1 To $aArray[0] $aReturn = __ShellAll_RegistryGet
($aArray[$i]) If $aReturn[0][0] > 0 Then For $j = 1 To $aReturn[0][0] If $aReturn[$j][0] = $sName And $sDelete <> $aReturn[$j][1] Then $sDelete = $aReturn[$j][1] RegDelete($sDelete) EndIf Next ReDim $aFinal[$aFinal[0][0] + $aReturn[0][0] + 1][$aReturn[0][1]] For $j = 1 To $aReturn[0][0] $aFinal[0][0] += 1 For $k = 0 To $aReturn[0][1] - 1 $aFinal[$aFinal[0][0]][$k] = $aReturn[$j][$k] Next Next $aFinal[0][1] = $aReturn[0][1] EndIf Next Return $aFinalEndFunc ;==>_ShellAll_Uninstall; #INTERNAL_USE_ONLY#============================================================================================================Func __ShellAll_RegistryGet
($sRegistryKey) Local $aArray[1][5] = [[0, 5]], $iCount_1 = 0, $iCount_2 = 0, $iDimension = 0, $iError = 0, $sRegistryKey_All = '', $sRegistryKey_Main = '', $sRegistryKey_Name = '', _
$sRegistryKey_Value = '' While 1 If $iError Then ExitLoop EndIf $sRegistryKey_Main = RegEnumKey($sRegistryKey, $iCount_1 + 1) If @error Then $sRegistryKey_All = $sRegistryKey $iError = 1 Else $sRegistryKey_All = $sRegistryKey & $sRegistryKey_Main EndIf $iCount_2 = 0 While 1 $sRegistryKey_Name = RegEnumVal($sRegistryKey_All, $iCount_2 + 1) If @error Then ExitLoop EndIf If ($aArray[0][0] + 1) >= $iDimension Then $iDimension = ($aArray[0][0] + 1) * 2 ReDim $aArray[$iDimension][$aArray[0][1]] EndIf $sRegistryKey_Value = RegRead($sRegistryKey_All, $sRegistryKey_Name) $aArray[$aArray[0][0] + 1][0] = $sRegistryKey_Main $aArray[$aArray[0][0] + 1][1] = $sRegistryKey_All $aArray[$aArray[0][0] + 1][2] = $sRegistryKey & $sRegistryKey_Main & '\' & $sRegistryKey_Name $aArray[$aArray[0][0] + 1][3] = $sRegistryKey_Name $aArray[$aArray[0][0] + 1][4] = $sRegistryKey_Value $aArray[0][0] += 1 $iCount_2 += 1 WEnd $iCount_1 += 1 WEnd ReDim $aArray[$aArray[0][0] + 1][$aArray[0][1]] Return $aArrayEndFunc ;==>__ShellAll_RegistryGet
Le code est long car il y a l'UDF de guinness pour _ShellAll
[edit] Si le déplacement échoue c'est, soit que le fichier est ouvert par un autre programme, soit le nom de ce fichier existe déjà dans le dossier destination