Partage
  • Partager sur Facebook
  • Partager sur Twitter

Script trouver / renommer et exporter un fichier

sans chemin d'accès

Sujet résolu
    21 décembre 2018 à 21:13:12

    Effectivement, il y avait une erreur lors du premier paramétrage, voici le nouveau code:

    #include <AutoItConstants.au3>
    #include <Array.au3>
    #include <Crypt.au3>
    #include <File.au3>
    #include <FTPEx.au3>
    
    
    $sCheminINI = @ScriptDir & '\FTP_Param.ini'
    $algo = $CALG_AES_256	;le type d'algorithme
    ;Permet de limiter la possibilité de décrypter les identifiants depuis un autre ordinateur par simple copier coller du fichier ini
    $pass = @ComputerName & @UserName
    
    ;-------------------------------------------------------------- Début de la partie paramétrage --------------------------------------------------------------
    
    $sFileNameToSearch = IniRead($sCheminINI,"Param","File","")
    If Not $sFileNameToSearch Then
    	;Nom du fichier à chercher (ajout du caractère joker "*")
    	$sFileNameToSearch = InputBox('Nom du fichier','Quel est le nom du fichier à chercher ?','jarltech*','',240,130)
    	If @error Then Exit
    	IniWrite($sCheminINI,"Param","File",$sFileNameToSearch)	;On enregistre l'info
    EndIf
    
    $sFileNameRename = IniRead($sCheminINI,"Param","FileRename","")
    If Not $sFileNameRename Then
    	;Nom du fichier après renommage
    	$sFileNameRename  = InputBox('Nom du fichier après renommage','Quel est le nom du fichier après renommage ?','jarltech.csv','',255,130)
    	If @error Then Exit
    	IniWrite($sCheminINI,"Param","FileRename",$sFileNameRename )	;On enregistre l'info
    EndIf
    
    $sServer = IniRead($sCheminINI,"Param","Server","")
    If Not $sServer Then
    	;Nom ou IP du serveur FTP
    	$sServer = InputBox('Nom ou IP du serveur FTP','Quel est le Nom ou IP du serveur FTP ?','','',240,130)
    	If @error Then Exit
    	IniWrite($sCheminINI,"Param","Server",$sServer)	;On enregistre l'info
    EndIf
    
    $sUsernameCrypted = IniRead($sCheminINI,"Param","user","")
    If Not $sUsernameCrypted Then
    	$sUsername = InputBox("Nom d'utilisateur","Quel est le Nom d'utilisateur ?",'','',240,130)                        ;Nom d'utilisateur
    	If @error Then Exit
    	$sUsernameCrypted = _Crypt_EncryptData($sUsername,_encrypt_phrase_user(), $algo)
    	IniWrite($sCheminINI,"Param","user", StringRight($sUsernameCrypted,stringlen($sUsernameCrypted)-2))	;On enregistre l'info de manière cryptée
    EndIf
    
    $sPassCrypted = IniRead($sCheminINI,"Param","mdp","")
    If Not $sPassCrypted Then
    	$sPass = InputBox('Mot de passe','Quel est le Mot de passe ?','','*',240,130)                               ;Mot de passe
    	If @error Then Exit
    	$sPassCrypted = _Crypt_EncryptData($sPass,_encrypt_phrase_mdp(), $algo)
    	IniWrite($sCheminINI,"Param","mdp", StringRight($sPassCrypted,stringlen($sPassCrypted)-2))	;On enregistre l'info de manière cryptée
    EndIf
    
    $sRemoteFilePath = IniRead($sCheminINI,"Param","RemotePath","")
    If Not $sRemoteFilePath Then
    	;Chemin sur serveur FTP
    	$sRemoteFilePath = InputBox('Chemin vers le répertoire distant','Quel est le chemin sur le serveur FTP ?','\','',240,130)
    	If @error Then Exit
    	IniWrite($sCheminINI,"Param","RemotePath",$sRemoteFilePath)	;On enregistre l'info
    EndIf
    ;On remplace les / par des \ et on en ajoute un \ avant et après pour que le _FTP_FilePut fontionne
    $sRemoteFilePath = StringReplace($sRemoteFilePath,'/','\')
    If StringCompare(StringLeft($sRemoteFilePath,1),'\') <> 0 Then $sRemoteFilePath = '\' & $sRemoteFilePath
    If StringCompare(StringRight($sRemoteFilePath,1),'\') <> 0 Then $sRemoteFilePath &= '\'
    
    $sConnexionName = 'Ma Connexion FTP'    ;Peut importe le nom, mais il en faut un
    
    $sUsernameDecrypted = BinaryToString(_Crypt_DecryptData("0x" & $sUsernameCrypted, _encrypt_phrase_user(), $algo))	;On décrypte la valeur récupérée
    $sPassDecrypted = BinaryToString(_Crypt_DecryptData("0x" & $sPassCrypted, _encrypt_phrase_mdp(), $algo))	;On décrypte la valeur récupérée
    
    ;-------------------------------------------------------------- Fin de la partie paramétrage --------------------------------------------------------------
    
    $hOpen = _FTP_Open($sConnexionName)
    $hConn = _FTP_Connect($hOpen, $sServer, $sUsernameDecrypted, $sPassDecrypted)
    
    If @error Then
    	MsgBox($MB_SYSTEMMODAL, '_FTP_Connect', 'ERREUR=' & @error)
    Else
    	Dim $sDrive, $sDir, $sFileName, $sExtension
    
    	Global $aDrives = DriveGetDrive($DT_ALL)
    	If @error Then
    		MsgBox(16, "Erreur de récupération de la liste des lecteurs", "Erreur : " & @error)
    	Else
    		Dim $tLastFileGetTime = 0
    		Dim $sCompleteFilePath,$aFileList
    		;Pour chaque lecteur
    		For $i = 1 To $aDrives[0]
    			;On lance la recherche (on ne recherche que des fichiers et on exclue les fichiers/dossiers systèmes et cachés)
    			$aFileList = _FileListToArrayRec($aDrives[$i] & "\", $sFileNameToSearch, $FLTAR_FILES + $FLTAR_NOSYSTEM + $FLTAR_NOHIDDEN , $FLTAR_RECUR, $FLTAR_NOSORT, $FLTAR_FULLPATH)
    
    			;Si le fichier a été trouvé au moins une fois
    			If Not @error Then
    				For $j=1 To $aFileList[0]
    					$tFileGetTime = FileGetTime($aFileList[$j],0,1)
    					If  $tFileGetTime > $tLastFileGetTime Then				;On récupère les chemins du fichier le plus récent correspondant aux critères
    						$sDrive = $sDir = $sFileName = $sExtension = ""
    						$aPath = _PathSplit ( $aFileList[$j], $sDrive, $sDir, $sFileName, $sExtension)
    						$sCompletePath = $sDrive &  $sDir
    						$sCompleteFilePath = $aFileList[$j]
    						$tLastFileGetTime = $tFileGetTime
    					EndIf
    				Next
    			EndIf
    		Next
    
    		;On renomme le fichier
    		FileMove($sCompleteFilePath,$sCompletePath & $sFileNameRename)
    
    		;On place le fichier sur le serveur FTP
    MsgBox(0,'$sRemoteFilePath & $sFileNameRename',$sRemoteFilePath & $sFileNameRename)
    		If _FTP_FilePut ($hConn, $sCompletePath & $sFileNameRename, $sRemoteFilePath & $sFileNameRename) Then
    			MsgBox(64,"Ok","Fichier exporté en FTP avec succès.")
    		Else
    			MsgBox(48,"Erreur","Erreur d'export par FTP.")
    		EndIf
    	EndIf
    EndIf
    $iFtpc = _FTP_Close($hConn)
    $iFtpo = _FTP_Close($hOpen)
    
    
    ;Histoire de compliquer le déchiffrage si quelqu'un essaie
    Func _encrypt_phrase_user()
    		Return $pass & "user"
    EndFunc
    
    Func _encrypt_phrase_mdp()
    	Return $pass & "mdp"
    EndFunc

    En parallèle j'ai ajouté un message avec le chemin distant, peux-tu me confirmer qu'il est de l'ordre de:

    "\dossier_potentiel\jarltech"

    • Partager sur Facebook
    • Partager sur Twitter
      22 décembre 2018 à 3:13:48

      oui il m'affiche bien \dossier\jarltech.csv

      mais toujours une erreur d'export ftp

      • Partager sur Facebook
      • Partager sur Twitter
        22 décembre 2018 à 11:37:01

        Peux-tu me donner le code d'erreur qui est après "Erreur d'export en FTP:" ?

        De plus, as-tu déjà testé l'export à partir d'un client FTP tel que FileZilla ? Si oui, peux-tu me donner les paramètres utilisés (hors identifiants) ?

        Bon, c'est à n'y rien comprendre...

        J'ai fait de nouveaux tests sur un site en ligne de chez www.000webhost.com, et cette fois, ce sont bien des "/" qu'il faut...

        bilan, j'ai corrigé pour de bon le souci de premier paramétrage des identifiants (j'avais encore oublié quelque chose) et j'ai remis en place des "/" dans le chemin distant:

        #include <AutoItConstants.au3>
        #include <Array.au3>
        #include <Crypt.au3>
        #include <File.au3>
        #include <FTPEx.au3>
        
        
        $sCheminINI = @ScriptDir & '\FTP_Param.ini'
        $algo = $CALG_AES_256	;le type d'algorithme
        ;Permet de limiter la possibilité de décrypter les identifiants depuis un autre ordinateur par simple copier coller du fichier ini
        $pass = @ComputerName & @UserName
        
        ;-------------------------------------------------------------- Début de la partie paramétrage --------------------------------------------------------------
        
        $sFileNameToSearch = IniRead($sCheminINI,"Param","File","")
        If Not $sFileNameToSearch Then
        	;Nom du fichier à chercher (ajout du caractère joker "*")
        	$sFileNameToSearch = InputBox('Nom du fichier','Quel est le nom du fichier à chercher ?','jarltech*','',240,130)
        	If @error Then Exit
        	IniWrite($sCheminINI,"Param","File",$sFileNameToSearch)	;On enregistre l'info
        EndIf
        
        $sFileNameRename = IniRead($sCheminINI,"Param","FileRename","")
        If Not $sFileNameRename Then
        	;Nom du fichier après renommage
        	$sFileNameRename  = InputBox('Nom du fichier après renommage','Quel est le nom du fichier après renommage ?','jarltech.csv','',255,130)
        	If @error Then Exit
        	IniWrite($sCheminINI,"Param","FileRename",$sFileNameRename )	;On enregistre l'info
        EndIf
        
        $sServer = IniRead($sCheminINI,"Param","Server","")
        If Not $sServer Then
        	;Nom ou IP du serveur FTP
        	$sServer = InputBox('Nom ou IP du serveur FTP','Quel est le Nom ou IP du serveur FTP ?','','',240,130)
        	If @error Then Exit
        	IniWrite($sCheminINI,"Param","Server",$sServer)	;On enregistre l'info
        EndIf
        
        $sUsernameCrypted = IniRead($sCheminINI,"Param","user","")
        If Not $sUsernameCrypted Then
        	$sUsername = InputBox("Nom d'utilisateur","Quel est le Nom d'utilisateur ?",'','',240,130)                        ;Nom d'utilisateur
        	If @error Then Exit
        	$sUsernameCrypted = _Crypt_EncryptData($sUsername,_encrypt_phrase_user(), $algo)
        	$sUsernameCrypted = StringRight($sUsernameCrypted,stringlen($sUsernameCrypted)-2)
        	IniWrite($sCheminINI,"Param","user", $sUsernameCrypted)	;On enregistre l'info de manière cryptée
        EndIf
        
        $sPassCrypted = IniRead($sCheminINI,"Param","mdp","")
        If Not $sPassCrypted Then
        	$sPass = InputBox('Mot de passe','Quel est le Mot de passe ?','','*',240,130)                               ;Mot de passe
        	If @error Then Exit
        	$sPassCrypted = _Crypt_EncryptData($sPass,_encrypt_phrase_mdp(), $algo)
        	$sPassCrypted = StringRight($sPassCrypted,stringlen($sPassCrypted)-2)
        	IniWrite($sCheminINI,"Param","mdp",$sPassCrypted )	;On enregistre l'info de manière cryptée
        EndIf
        
        $sRemoteFilePath = IniRead($sCheminINI,"Param","RemotePath","")
        If Not $sRemoteFilePath Then
        	;Chemin sur serveur FTP
        	$sRemoteFilePath = InputBox('Chemin vers le répertoire distant','Quel est le chemin sur le serveur FTP ?','\','',240,130)
        	If @error Then Exit
        	IniWrite($sCheminINI,"Param","RemotePath",$sRemoteFilePath)	;On enregistre l'info
        EndIf
        ;On remplace les \ par des / et on en ajoute un / avant et après pour que le _FTP_FilePut fontionne
        $sRemoteFilePath = StringReplace($sRemoteFilePath,'\','/')
        If StringCompare(StringLeft($sRemoteFilePath,1),'/') <> 0 Then $sRemoteFilePath = '/' & $sRemoteFilePath
        If StringCompare(StringRight($sRemoteFilePath,1),'/') <> 0 Then $sRemoteFilePath &= '/'
        
        $sConnexionName = 'Ma Connexion FTP'    ;Peut importe le nom, mais il en faut un
        
        $sUsernameDecrypted = BinaryToString(_Crypt_DecryptData("0x" & $sUsernameCrypted, _encrypt_phrase_user(), $algo))	;On décrypte la valeur récupérée
        $sPassDecrypted = BinaryToString(_Crypt_DecryptData("0x" & $sPassCrypted, _encrypt_phrase_mdp(), $algo))	;On décrypte la valeur récupérée
        
        ;-------------------------------------------------------------- Fin de la partie paramétrage --------------------------------------------------------------
        
        $hOpen = _FTP_Open($sConnexionName)
        $hConn = _FTP_Connect($hOpen, $sServer, $sUsernameDecrypted, $sPassDecrypted)
        
        If @error Then	;LE TEMPS DES TESTS
        	MsgBox($MB_SYSTEMMODAL, '_FTP_Connect', 'ERREUR=' & @error)
        Else
        	Dim $sDrive, $sDir, $sFileName, $sExtension
        
        	Global $aDrives = DriveGetDrive($DT_ALL)
        	If @error Then
        		MsgBox(16, "Erreur de récupération de la liste des lecteurs", "Erreur : " & @error)
        	Else
        		Dim $tLastFileGetTime = 0
        		Dim $sCompleteFilePath,$aFileList
        		;Pour chaque lecteur
        		For $i = 1 To $aDrives[0]
        			;On lance la recherche (on ne recherche que des fichiers et on exclue les fichiers/dossiers systèmes et cachés)
        			$aFileList = _FileListToArrayRec($aDrives[$i] & "\", $sFileNameToSearch, $FLTAR_FILES + $FLTAR_NOSYSTEM + $FLTAR_NOHIDDEN , $FLTAR_RECUR, $FLTAR_NOSORT, $FLTAR_FULLPATH)
        
        			;Si le fichier a été trouvé au moins une fois
        			If Not @error Then
        				For $j=1 To $aFileList[0]
        					$tFileGetTime = FileGetTime($aFileList[$j],0,1)
        					If  $tFileGetTime > $tLastFileGetTime Then				;On récupère les chemins du fichier le plus récent correspondant aux critères
        						$sDrive = $sDir = $sFileName = $sExtension = ""
        						$aPath = _PathSplit ( $aFileList[$j], $sDrive, $sDir, $sFileName, $sExtension)
        						$sCompletePath = $sDrive &  $sDir
        						$sCompleteFilePath = $aFileList[$j]
        						$tLastFileGetTime = $tFileGetTime
        					EndIf
        				Next
        			EndIf
        		Next
        
        		;On renomme le fichier
        		FileMove($sCompleteFilePath,$sCompletePath & $sFileNameRename)
        
        		;On place le fichier sur le serveur FTP
        		If _FTP_FilePut($hConn, $sCompletePath & $sFileNameRename, $sRemoteFilePath & $sFileNameRename ) Then
        			MsgBox(64,"Ok","Fichier exporté en FTP avec succès.")
        		Else
        			Local $Err,$sFTP_Message
        			 _FTP_GetLastResponseInfo($Err, $sFTP_Message)
        			MsgBox(48,"Erreur","Erreur d'export en FTP:" & @CRLF & 'Erreur=' & $Err & @CRLF & 'FTP_Message:' & @CRLF & $sFTP_Message)
        		EndIf
        	EndIf
        EndIf
        $iFtpc = _FTP_Close($hConn)
        $iFtpo = _FTP_Close($hOpen)
        
        
        ;Histoire de compliquer le déchiffrage si quelqu'un essaie
        Func _encrypt_phrase_user()
        		Return $pass & "user"
        EndFunc
        
        Func _encrypt_phrase_mdp()
        	Return $pass & "mdp"
        EndFunc
        

        -
        Edité par Blaster13 22 décembre 2018 à 22:29:15

        • Partager sur Facebook
        • Partager sur Twitter
          23 décembre 2018 à 5:42:08

          Blaster13 a écrit:

          Peux-tu me donner le code d'erreur qui est après "Erreur d'export en FTP:" ?

          De plus, as-tu déjà testé l'export à partir d'un client FTP tel que FileZilla ? Si oui, peux-tu me donner les paramètres utilisés (hors identifiants) ?

          Bon, c'est à n'y rien comprendre...

          J'ai fait de nouveaux tests sur un site en ligne de chez www.000webhost.com, et cette fois, ce sont bien des "/" qu'il faut...

          Edité par Blaster13 il y a environ 7 heures


          Excuse moi, j'ai pas eu le temps hier pour te répondre donc :

          j'avais pas de code erreur sa me disait juste erreur d'export par FTP

          Oui j'ai déjà utiliser et réussi a exporter un fichier grâce a filezilla client, j'utilise le même mdp, le même identifiant, le même host et le port 21 par contre a chaque fois j'ai un message de sécurité (dis moi si sa t'intéresse au cas ou car je me souviens plus trop de ça que sa disait)

          je test le nouveau code et j'édit en dessous le résultat

          C'EST BOOOOONNNN ça fonctionne GROS GG mec vraiment merci a toi :D:p:magicien:

          Du coup est ce que tu sais a quoi était du le dysfonctionnement avant ?

          Autre question est-il possible que lors de la recherche des fichiers contenant le mot jarltech on puisse prendre le plus récent ?

          Et autre question : le fichier on le reçois par mail (via thunderbird) en pièce jointe, et on doit a chaque fois enregistrer le ficher. Est-il possible dans le script de lui faire enregistrer la pièces jointe automatiquement ? (juste a titre d'info ^^) normalement mon ancien tuteur de stage car je ne suis plu en stage peut le récupérer déjà automatiquement, mais je pose la question a titre perso pour savoir si c'est fesable et si oui si c'est possible que tu m'explique mais comme on s'éloigne du sujet peut être en mp ?

          Et information qui pourrait aider autre personne : Qu'as tu fais comme cour pour réussir a faire ça ? 

          -
          Edité par QuentinTréheux 23 décembre 2018 à 5:59:24

          • Partager sur Facebook
          • Partager sur Twitter
            23 décembre 2018 à 14:36:39

            "C'EST BOOOOONNNN ça fonctionne GROS GG mec vraiment merci a toi :D:p:magicien:"
            -> Yeaaaaaaaaaaaaaah !!! On y est arrivé :D


            "Du coup est ce que tu sais a quoi était du le dysfonctionnement avant ?"
            -> C'est là où j'hallucine:
            Peut-être que dans les premiers tests, j'avais oublié de contrôler qu'il y avait bien un '/' avant et après le chemin distant.
            De plus dans mon premier test perso, ça ne fonctionnait qu'avec les '\' mais c'était sur un serveur au boulot et pas sur le web, ça a certainement eu une incidence.


            "Autre question est-il possible que lors de la recherche des fichiers contenant le mot jarltech on puisse prendre le plus récent ?"
            -> C'est déjà le cas normalement, tu m'avais fait la demande, d'où l'utilisation de la fonction "FileGetTime", je te laisse contrôler.


            "Et autre question : le fichier on le reçois par mail (via thunderbird) en pièce jointe, et on doit a chaque fois enregistrer le ficher. Est-il possible dans le script de lui faire enregistrer la pièces jointe automatiquement ? (juste a titre d'info ^^) normalement mon ancien tuteur de stage car je ne suis plu en stage peut le récupérer déjà automatiquement, mais je pose la question a titre perso pour savoir si c'est fesable et si oui si c'est possible que tu m'explique mais comme on s'éloigne du sujet peut être en mp ?"
            -> Je n'ai jamais fait auparavant, mais on peut essayer. Je te propose d'ouvrir un autre sujet plutôt (toujours dans le but de pouvoir aider d'autres personnes) et de m'indiquer quand ce sera fait.
            Par contre il me faudra au moins le fournisseur de messagerie utilisé (Yahoo, Gmail, ...) car Thunderbird n'est qu'un client de messagerie.
            Et le nom de la PJ ou l'objet du mail afin de déterminer la PJ à récupérer.


            Et information qui pourrait aider autre personne : Qu'as tu fais comme cour pour réussir a faire ça ?
            -> En fait ça fait près de 10 ans que j'ai connu AutoIt, à l'origine pour réaliser des installations automatisées de logiciels, et j'ai trouvé cet outil très intuitif et complet, il existe plein d'exemples sur le Net (il y a aussi un tuto sur le site du Zéro) et l'aide est généralement complète (un peu moins pour la partie FTP :p )

            • Partager sur Facebook
            • Partager sur Twitter
              23 décembre 2018 à 16:54:26

              Blaster13 a écrit:

              "C'EST BOOOOONNNN ça fonctionne GROS GG mec vraiment merci a toi :D:p:magicien:"
              -> Yeaaaaaaaaaaaaaah !!! On y est arrivé :D


              "Du coup est ce que tu sais a quoi était du le dysfonctionnement avant ?"
              -> C'est là où j'hallucine:
              Peut-être que dans les premiers tests, j'avais oublié de contrôler qu'il y avait bien un '/' avant et après le chemin distant.
              De plus dans mon premier test perso, ça ne fonctionnait qu'avec les '\' mais c'était sur un serveur au boulot et pas sur le web, ça a certainement eu une incidence.


              "Autre question est-il possible que lors de la recherche des fichiers contenant le mot jarltech on puisse prendre le plus récent ?"
              -> C'est déjà le cas normalement, tu m'avais fait la demande, d'où l'utilisation de la fonction "FileGetTime", je te laisse contrôler.


              "Et autre question : le fichier on le reçois par mail (via thunderbird) en pièce jointe, et on doit a chaque fois enregistrer le ficher. Est-il possible dans le script de lui faire enregistrer la pièces jointe automatiquement ? (juste a titre d'info ^^) normalement mon ancien tuteur de stage car je ne suis plu en stage peut le récupérer déjà automatiquement, mais je pose la question a titre perso pour savoir si c'est fesable et si oui si c'est possible que tu m'explique mais comme on s'éloigne du sujet peut être en mp ?"
              -> Je n'ai jamais fait auparavant, mais on peut essayer. Je te propose d'ouvrir un autre sujet plutôt (toujours dans le but de pouvoir aider d'autres personnes) et de m'indiquer quand ce sera fait.
              Par contre il me faudra au moins le fournisseur de messagerie utilisé (Yahoo, Gmail, ...) car Thunderbird n'est qu'un client de messagerie.
              Et le nom de la PJ ou l'objet du mail afin de déterminer la PJ à récupérer.


              Et information qui pourrait aider autre personne : Qu'as tu fais comme cour pour réussir a faire ça ?
              -> En fait ça fait près de 10 ans que j'ai connu AutoIt, à l'origine pour réaliser des installations automatisées de logiciels, et j'ai trouvé cet outil très intuitif et complet, il existe plein d'exemples sur le Net (il y a aussi un tuto sur le site du Zéro) et l'aide est généralement complète (un peu moins pour la partie FTP :p )

              ok ok merci pour tes réponses je t'enverrai un message en pv lorsque j'aurai créer un nouveau sujet ^^

              • Partager sur Facebook
              • Partager sur Twitter

              Script trouver / renommer et exporter un fichier

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown