Etape 1 : trouver un fichier dont je ne connais pas l'emplacement (donc pas de chemin d'accès) et dont je ne connais qu'une partie du nom par exemple mon fichier s'appelle "jarltech20181123", j'aimerai pouvoir le trouver juste en indiquant "jarltech" et le chercher sur tout les lecteur C: D: etc
Etape 2 : Renommer le fichier "jarltech20181123" en "jarltech"
Etape 3 : l'exporter sur un FTP dans un dossier en particulier
Est ce que cela est possible ce cette façon ou faut il que je que je m'y prenne d'une autre manière ?
Est ce que ce script sera universel a toute version de windows ?
#include <AutoItConstants.au3>
#include <Array.au3>
#include <File.au3>
#include <FTPEx.au3>
$sFileNameToSearch = "jarltech*" ;Nom du fichier à chercher (ajout du caractère joker "*")
$sServer = 'ftp.xxx.fr' ;Nom ou IP du serveur FTP
$sUsername = '' ;Nom d'utilisateur
$sPass = '' ;Mot de passe
$sRemoteFile = '\' ;Chemin complet ou relatif vers le répertoire distant (par défaut répertoire courant coté serveur)
$sConnexionName = 'Ma Connexion FTP' ;Peut importe le nom, mais il en faut un
$hOpen = _FTP_Open($sConnexionName)
$hConn = _FTP_Connect($hOpen, $sServer, $sUsername, $sPass)
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
;Pour chaque lecteur
For $i = 1 To $aDrives[0]
;On lance la recherche
$aFileList = _FileListToArrayRec($aDrives[$i] & "\", $sFileNameToSearch, $FLTAR_FILES, $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]
$sDrive = $sDir = $sFileName = $sExtension = ""
$aPath = _PathSplit ( $aFileList[$j], $sDrive, $sDir, $sFileName, $sExtension)
$sCompletePath = $aPath[$PATH_DRIVE] & $aPath[$PATH_DIRECTORY]
;On le renomme
FileMove($aFileList[$j],$sCompletePath& "jarltech")
;On place le fichier sur le serveur FTP
_FTP_FilePut ( $hConn, $sCompletePath & "jarltech", $sRemoteFile & "jarltech")
Next
EndIf
Next
EndIf
EndIf
$iFtpc = _FTP_Close($hConn)
$iFtpo = _FTP_Close($hOpen)
#include <AutoItConstants.au3>
#include <Array.au3>
#include <File.au3>
#include <FTPEx.au3>
$sFileNameToSearch = "jarltech*" ;Nom du fichier à chercher (ajout du caractère joker "*")
$sServer = 'ftp.xxx.fr' ;Nom ou IP du serveur FTP
$sUsername = '' ;Nom d'utilisateur
$sPass = '' ;Mot de passe
$sRemoteFile = '\' ;Chemin complet ou relatif vers le répertoire distant (par défaut répertoire courant coté serveur)
$sConnexionName = 'Ma Connexion FTP' ;Peut importe le nom, mais il en faut un
$hOpen = _FTP_Open($sConnexionName)
$hConn = _FTP_Connect($hOpen, $sServer, $sUsername, $sPass)
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
;Pour chaque lecteur
For $i = 1 To $aDrives[0]
;On lance la recherche
$aFileList = _FileListToArrayRec($aDrives[$i] & "\", $sFileNameToSearch, $FLTAR_FILES, $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]
$sDrive = $sDir = $sFileName = $sExtension = ""
$aPath = _PathSplit ( $aFileList[$j], $sDrive, $sDir, $sFileName, $sExtension)
$sCompletePath = $aPath[$PATH_DRIVE] & $aPath[$PATH_DIRECTORY]
;On le renomme
FileMove($aFileList[$j],$sCompletePath& "jarltech")
;On place le fichier sur le serveur FTP
_FTP_FilePut ( $hConn, $sCompletePath & "jarltech", $sRemoteFile & "jarltech")
Next
EndIf
Next
EndIf
EndIf
$iFtpc = _FTP_Close($hConn)
$iFtpo = _FTP_Close($hOpen)
- Edité par Blaster13 23 novembre 2018 à 22:09:51
Bonjour a toi,
merci pour ce code, mais peux tu m'expliquez un petit peu (histoire que je comprenne) et c'est quoi la commande pour renommer le fichier une fois trouver ?
Si un fichier a le même nom sur le FTP est ce que le fichier sera remplacer ou il y aura 2 fichiers ou il ne se passera rien ? (j'aimerai qu'il soit remplacer par le plus récent)
Et c'est quoi Autoit ?
- Edité par QuentinTréheux 26 novembre 2018 à 9:52:07
"c'est quoi la commande pour renommer le fichier une fois trouver ?"
;On le renomme
FileMove($aFileList[$j],$sCompletePath & "jarltech")
La commande est FileMove, le paramère '$aFileList[$j]' correspond au Nième (s'il y en a plusieurs) chemin complet du fichier correspondant au critère recherché (à savoir un fichier qui se nomme "jarltech*"), l'étoile est un caractère joker (ce qui signifie tous les fichiers commençant par "jarltech" qu'il soient suivis de quelque chose ou pas).
Le paramètre '$sCompletePath & "jarltech"' retourne le chemin complet du fichier du paramètre précédent se terminant par un "\" et "jarltech" le nouveau nom.
C'est comme ça que l'on renomme un fichier dans ce langage.
"Si un fichier a le même nom sur le FTP est ce que le fichier sera remplacer ou il y aura 2 fichiers ou il ne se passera rien ? (j'aimerai qu'il soit remplacer par le plus récent)"
-> Je pense qu'il est remplacé, mais au pire il est possible d'utiliser "_FTP_FileDelete($hconn, $sRemoteFile & "jarltech"" pour supprimer au préalable le fichier distant (Je viens de me rendre compte qu'il serait plus "judicieux" de renommer cette variable en $sRemoteFilePath pour faciliter la lecture du code, si tu souhaites le faire, pense à renommer également au début du code ligne 11)
Et c'est quoi Autoit ?
-> Cf. https://www.autoitscript.com/site/: "AutoIt v3 is a freeware BASIC-like scripting language designed for automating the Windows GUI and general scripting. It uses a combination of simulated keystrokes, mouse movement and window/control manipulation in order to automate tasks in a way not possible or reliable with other languages."
Je te conseille d'installer AutoIt depuis le lien de mon premier post, puis l'éditeur: https://www.autoitscript.com/cgi-bin/getfile.pl?../autoit3/scite/download/SciTE4AutoIt3.exe (ce qui facilite l'écriture du code et l'utilisation de l'aide en appyant sur F1, une fois le curseur positionné sur une des fonctions) Reste à : 1- Créer un nouveau fichier depuis l'éditeur 2- Faire un copier-coller du code que j'ai posté 3- Modifier le contenu des variables de la ligne 8 à 11 4- Compiler ton script en utilisant le raccourci Ctrl+F7 Cela te génèrera l'exécutable que tu pourras lancer depuis n'importe quelle version de Windows (les antivirus n'aiment pas trop ce genre de script et ont tendance à modifier l'exécutable ou le supprimer, je te conseille donc de réaliser tes scripts dans un répertoire à exclure de l'analyse antivirale).
"c'est quoi la commande pour renommer le fichier une fois trouver ?"
;On le renomme
FileMove($aFileList[$j],$sCompletePath & "jarltech")
La commande est FileMove, le paramère '$aFileList[$j]' correspond au Nième (s'il y en a plusieurs) chemin complet du fichier correspondant au critère recherché (à savoir un fichier qui se nomme "jarltech*"), l'étoile est un caractère joker (ce qui signifie tous les fichiers commençant par "jarltech" qu'il soient suivis de quelque chose ou pas).
Le paramètre '$sCompletePath & "jarltech"' retourne le chemin complet du fichier du paramètre précédent se terminant par un "\" et "jarltech" le nouveau nom.
C'est comme ça que l'on renomme un fichier dans ce langage.
"Si un fichier a le même nom sur le FTP est ce que le fichier sera remplacer ou il y aura 2 fichiers ou il ne se passera rien ? (j'aimerai qu'il soit remplacer par le plus récent)"
-> Je pense qu'il est remplacé, mais au pire il est possible d'utiliser "_FTP_FileDelete($hconn, $sRemoteFile & "jarltech"" pour supprimer au préalable le fichier distant (Je viens de me rendre compte qu'il serait plus "judicieux" de renommer cette variable en $sRemoteFilePath pour faciliter la lecture du code, si tu souhaites le faire, pense à renommer également au début du code ligne 11)
Et c'est quoi Autoit ?
-> Cf. https://www.autoitscript.com/site/: "AutoIt v3 is a freeware BASIC-like scripting language designed for automating the Windows GUI and general scripting. It uses a combination of simulated keystrokes, mouse movement and window/control manipulation in order to automate tasks in a way not possible or reliable with other languages."
Je te conseille d'installer AutoIt depuis le lien de mon premier post, puis l'éditeur: https://www.autoitscript.com/cgi-bin/getfile.pl?../autoit3/scite/download/SciTE4AutoIt3.exe (ce qui facilite l'écriture du code et l'utilisation de l'aide en appyant sur F1, une fois le curseur positionné sur une des fonctions) Reste à : 1- Créer un nouveau fichier depuis l'éditeur 2- Faire un copier-coller du code que j'ai posté 3- Modifier le contenu des variables de la ligne 8 à 11 4- Compiler ton script en utilisant le raccourci Ctrl+F7 Cela te génèrera l'exécutable que tu pourras lancer depuis n'importe quelle version de Windows (les antivirus n'aiment pas trop ce genre de script et ont tendance à modifier l'exécutable ou le supprimer, je te conseille donc de réaliser tes scripts dans un répertoire à exclure de l'analyse antivirale).
Je pense ne rien avoir oublié.
j'ai une erreur help me j'ai bien suvi ce que tu m'as dis
#include <AutoItConstants.au3>
#include <Array.au3>
#include <File.au3>
#include <FTPEx.au3>
$sFileNameToSearch = "jarltech*" ;Nom du fichier à chercher (ajout du caractère joker "*")
$sServer = '' ;Nom ou IP du serveur FTP
$sUsername = '' ;Nom d'utilisateur
$sPass = '' ;Mot de passe
$sRemoteFile = '\home\gentagfrfo\www' ;Chemin complet ou relatif vers le répertoire distant (par défaut répertoire courant coté serveur)
$sConnexionName = 'Ma Connexion FTP' ;Peut importe le nom, mais il en faut un
$hOpen = _FTP_Open($sConnexionName)
$hConn = _FTP_Connect($hOpen, $sServer, $sUsername, $sPass)
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
;Pour chaque lecteur
For $i = 1 To $aDrives[0]
;On lance la recherche
$aFileList = _FileListToArrayRec($aDrives[$i] & "\", $sFileNameToSearch, $FLTAR_FILES, $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]
$sDrive = $sDir = $sFileName = $sExtension = ""
$aPath = _PathSplit ( $aFileList[$j], $sDrive, $sDir, $sFileName, $sExtension)
$sCompletePath = $aPath[$PATH_DRIVE] & $aPath[$PATH_DIRECTORY]
;On le renomme
FileMove($aFileList[$j],$sCompletePath& "jarltech.csv")
;On place le fichier sur le serveur FTP
_FTP_FilePut ( $hConn, $sCompletePath & "jarltech.csv", $sRemoteFile & "jarltech.csv")
Next
EndIf
Next
EndIf
EndIf
$iFtpc = _FTP_Close($hConn)
$iFtpo = _FTP_Close($hOpen)
- Edité par Lamecarlate 30 novembre 2018 à 20:45:42
j'ai modifié le dernier message pour en enlever les données sensibles (notamment login et mot de passe), ainsi que l'image, où ces données apparaissaient également.
Pas d'aide concernant le code par MP, le forum est là pour ça :)
j'ai modifié le dernier message pour en enlever les données sensibles (notamment login et mot de passe), ainsi que l'image, où ces données apparaissaient également.
Bon après réinstallation du logiciel, mon erreur a disparue et le script ce lance bien et modifie bien le nom du ficher mais le fichier ne va pas sur le FTP une solution ?
Je viens de voir qu'il faut utiliser des '/' dans ton $sRemoteFile, et dans tous les cas il te manque le slash final après les "www" de cette même variable.
Si cela ne suffit pas, tu peux ajouter au-dessus du _FTP_FilePut de la ligne 39:
Alors sa fonctionen pas j'ai pas bien compris ce qui s'est passé ...
voilà mon code :
#include <AutoItConstants.au3>
#include <Array.au3>
#include <File.au3>
#include <FTPEx.au3>
$sFileNameToSearch = "jarltech*" ;Nom du fichier à chercher (ajout du caractère joker "*")
$sServer = 'ftp.*' ;Nom ou IP du serveur FTP
$sUsername = 'g*o' ;Nom d'utilisateur
$sPass = '****' ;Mot de passe
$sRemoteFile = '/home/gentagfrfo/www/' ;Chemin complet ou relatif vers le répertoire distant (par défaut répertoire courant coté serveur)
$sConnexionName = 'Ma Connexion FTP' ;Peut importe le nom, mais il en faut un
$hOpen = _FTP_Open($sConnexionName)
$hConn = _FTP_Connect($hOpen, $sServer, $sUsername, $sPass)
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
;Pour chaque lecteur
For $i = 1 To $aDrives[0]
;On lance la recherche
$aFileList = _FileListToArrayRec($aDrives[$i] & "\", $sFileNameToSearch, $FLTAR_FILES, $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]
$sDrive = $sDir = $sFileName = $sExtension = ""
$aPath = _PathSplit ( $aFileList[$j], $sDrive, $sDir, $sFileName, $sExtension)
$sCompletePath = $aPath[$PATH_DRIVE] & $aPath[$PATH_DIRECTORY]
;On le renomme
FileMove($aFileList[$j],$sCompletePath& "jarltech.csv")
;On place le fichier sur le serveur FTP
MsgBox(0,'_FTP_DirGetCurrent($hConn)',_FTP_DirGetCurrent($hConn))
_FTP_FilePut ( $hConn, $sCompletePath & "jarltech.csv", $sRemoteFile & "jarltech.csv")
Next
EndIf
Next
EndIf
EndIf
$iFtpc = _FTP_Close($hConn)
$iFtpo = _FTP_Close($hOpen)
et la ligne que tu m'as dis d'ajouter ma afficher ceci : puis une vingtaine de fois ceci :
Le premier message correspond bien à ce à quoi je m'attendais.
Le fait qu'il s'affiche une vingtaine de fois signifie que la recherche du fichier "jarltech*" a retourné une vingtaine d'occurences sur tes différents lecteurs.
1ère chose: On peut limiter la recherche à un lecteur (si besoin) plutôt que de chercher dans tous les lecteurs présents.
2ème chose: Le 0 signifie qu'il y a une erreur dans le répertoire actuel du FTP, je pense donc qu'il ne faut pas préciser le nom du fichier distant dans la commande :
Ceci dit, cela signigfie également que ton fichier sera remplacé 20 fois d'affilée (une fois que la commande sera fonctionnelle)... Une solution serait donc de dire:
If _FTP_FilePut ( $hConn, $sCompletePath & "jarltech", $sRemoteFilePath) == 1 Then ExitLoop
Ainsi, une fois le fichier remplacé coté FTP, la commande ne cherchera plus à s'exécuter, quel que soit le nombre de fois que le fichier a été trouvé.
Edit: On pourrait tester en laissant le nom du fichier dans la commande, mais en définissant $sRemoteFile = '/', on saura ainsi si le souci vient de l'écriture du chemin, ou d'autre chose. Si cela fonctionne le fichier se trouvera à la racine de ton répertoire FTP (pense qu'il faut potentiellement rafraichir l'affichage du contenu de ton serveur FTP, si tu avais ouvert une connexion auparavant)
San fonctionne toujours pas la j'ai cette erreur :
bon je vous remet le code au cas ou j'ai fais une bêtise
#include <AutoItConstants.au3>
#include <Array.au3>
#include <File.au3>
#include <FTPEx.au3>
$sFileNameToSearch = "jarltech*" ;Nom du fichier à chercher (ajout du caractère joker "*")
$sServer = 'ftp.***' ;Nom ou IP du serveur FTP
$sUsername = 'g*****' ;Nom d'utilisateur
$sPass = '*****' ;Mot de passe
$sRemoteFile = '/home/gentagfrfo/www/' ;Chemin complet ou relatif vers le répertoire distant (par défaut répertoire courant coté serveur)
$sConnexionName = 'Ma Connexion FTP' ;Peut importe le nom, mais il en faut un
$hOpen = _FTP_Open($sConnexionName)
$hConn = _FTP_Connect($hOpen, $sServer, $sUsername, $sPass)
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
;Pour chaque lecteur
For $i = 1 To $aDrives[0]
;On lance la recherche
$aFileList = _FileListToArrayRec($aDrives[$i] & "\", $sFileNameToSearch, $FLTAR_FILES, $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]
$sDrive = $sDir = $sFileName = $sExtension = ""
$aPath = _PathSplit ( $aFileList[$j], $sDrive, $sDir, $sFileName, $sExtension)
$sCompletePath = $aPath[$PATH_DRIVE] & $aPath[$PATH_DIRECTORY]
;On le renomme
FileMove($aFileList[$j],$sCompletePath& "jarltech.csv")
;On place le fichier sur le serveur FTP
If _FTP_FilePut ( $hConn, $sCompletePath & "jarltech.csv", $sRemoteFilePath) == 1 Then ExitLoop
Next
EndIf
Next
EndIf
EndIf
$iFtpc = _FTP_Close($hConn)
$iFtpo = _FTP_Close($hOpen)
Le message devrait t'afficher "1" si tout va bien.
- Edité par Blaster13 il y a environ 12 heures
Je viens de lancé le script, j'ai un message "FileMove 1" puis quatorze autre "FileMove 0".
Je regarde mon fichier est bien renommé, je regarde dans le FTP, que j'ouvre du coup et rien ...
J'étais en train de pensé comme je dois avoir le fichier en corbeille est ce qu'il essayera pas de transférer un fichier qui est dans la corbeille ou en mémoire tampon ?
Peut on pour être sur mettre un filtre qui fait en sorte qu'il envoi le plus récent ?
Au cas ou je remet le code :
#include <AutoItConstants.au3>
#include <Array.au3>
#include <File.au3>
#include <FTPEx.au3>
$sFileNameToSearch = "jarltech*" ;Nom du fichier à chercher (ajout du caractère joker "*")
$sServer = '********' ;Nom ou IP du serveur FTP
$sUsername = '******' ;Nom d'utilisateur
$sPass = '*****' ;Mot de passe
$sRemoteFilePath = '/' ;Chemin complet ou relatif vers le répertoire distant (par défaut répertoire courant coté serveur)
$sConnexionName = 'Ma Connexion FTP' ;Peut importe le nom, mais il en faut un
$hOpen = _FTP_Open($sConnexionName)
$hConn = _FTP_Connect($hOpen, $sServer, $sUsername, $sPass)
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
;Pour chaque lecteur
For $i = 1 To $aDrives[0]
;On lance la recherche
$aFileList = _FileListToArrayRec($aDrives[$i] & "\", $sFileNameToSearch, $FLTAR_FILES, $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]
$sDrive = $sDir = $sFileName = $sExtension = ""
$aPath = _PathSplit ( $aFileList[$j], $sDrive, $sDir, $sFileName, $sExtension)
$sCompletePath = $aPath[$PATH_DRIVE] & $aPath[$PATH_DIRECTORY]
;On le renomme
MsgBox(0,"FileMove",FileMove($aFileList[$j],$sCompletePath & "jarltech.csv"))
;On place le fichier sur le serveur FTP
If _FTP_FilePut ( $hConn, $sCompletePath & "jarltech.csv", $sRemoteFilePath) == 1 Then ExitLoop
Next
EndIf
Next
EndIf
EndIf
$iFtpc = _FTP_Close($hConn)
$iFtpo = _FTP_Close($hOpen)
- Edité par QuentinTréheux 6 décembre 2018 à 9:29:22
Ok, je me suis aperçu d'un problème dans la recherche, par défaut les dossiers systèmes n'étaient pas exclus, et cela pouvait poser problème.
Voici le code corrigé qui ne récupère que le fichier le plus récemment modifié:
#include <AutoItConstants.au3>
#include <Array.au3>
#include <File.au3>
#include <FTPEx.au3>
$sFileNameToSearch = "jarltech*" ;Nom du fichier à chercher (ajout du caractère joker "*")
$sServer = '********' ;Nom ou IP du serveur FTP
$sUsername = '******' ;Nom d'utilisateur
$sPass = '*****' ;Mot de passe
$sRemoteFilePath = '/' ;Chemin complet ou relatif vers le répertoire distant (par défaut répertoire courant coté serveur)
$sConnexionName = 'Ma Connexion FTP' ;Peut importe le nom, mais il en faut un
$hOpen = _FTP_Open($sConnexionName)
$hConn = _FTP_Connect($hOpen, $sServer, $sUsername, $sPass)
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 = $aPath[$PATH_DRIVE] & $aPath[$PATH_DIRECTORY]
$sCompleteFilePath = $aFileList[$j]
$tLastFileGetTime = $tFileGetTime
EndIf
Next
EndIf
Next
;On renomme le fichier
FileMove($sCompleteFilePath,$sCompletePath & "jarltech.csv")
;On place le fichier sur le serveur FTP
MsgBox(0,"_FTP_FilePut",_FTP_FilePut ( $hConn, $sCompletePath & "jarltech.csv", $sRemoteFilePath & 'jarltech.csv'))
EndIf
EndIf
$iFtpc = _FTP_Close($hConn)
$iFtpo = _FTP_Close($hOpen)
J'ai décalé le message sur la ligne du FTP_FilePut, si avec tout ça, ça ne fonctionne pas, on fera des tests basiques d'ajout d'un fichier sur le serveur.
Je me demande si cela ne vient pas du fait de copier coller le code depuis le site (j'ai eu beaucoup de mal à mettre en forme le code).
Essaye de copier le code à partir de la ligne 6 ou d'inverser l'ordre des 4 premières lignes (les "include") pour voir si le numéro de la ligne incréminé change.
Une fois le script exécuté, toutes les informations de connexions seront enregistrées dans un fichier Param_FTP.ini qui se trouvera dans le même répertoire que le script (les infos sensibles sont chiffrées).
Une fois le script exécuté, toutes les informations de connexions seront enregistrées dans un fichier Param_FTP.ini qui se trouvera dans le même répertoire que le script (les infos sensibles sont chiffrées).
Salut et merci d'avoir fait cela (j'était malade du mon absence d'une semaine)
Ton script me demande bien le nom du fichier, le nom après pour le renommer ect, ce qu'il faut pour le FTP.
Puis je l’exécute une deuxième fois et le truc c'est qu'il me dis cela :
Pourtant je me suis pas tromper dans les identifiant ect ... je vais réessayer au cas où, et je modifierai le post si besoin
EDIT : alors je n'ai plus l'erreur et je croix que sa venais du fait que l'identifiant et le mot de passe sois chiffré car ça c'est débloquer dans j'ai modifier ça dans le fichier param
Par contre j'ai un message FilePut 0 et mon fichier n'est pas sur le ftp
- Edité par QuentinTréheux 17 décembre 2018 à 14:44:51
Ravi de te retrouver parmi nous (je ne suis pas du genre à lacher l'affaire ).
Effectivement, je n'utilisais pas les bonnes informations de connexions, c'est maintenant corrigé (tu vas donc devoir effacer les informations dans le fichier param pour que le script te les demande à nouveau)
Le script va maintenant essayer d'ajouter 2 fichiers sur ton serveur, test.txt et test2.txt.
Si l'un des 2 est bien présent, on aura fait une belle avancée, car cela me donnera une piste sur la syntaxe du chemin distant à utiliser.
Pour info, il y aura un message pour chaque fichier.
Le nouveau script est téléchargeable au même endroit.
PS: Je viens de songer à quelque chose, ton port de connexion FTP est bien le 21 ? Ou tu l'as modifié ?
Ravi de te retrouver parmi nous (je ne suis pas du genre à lacher l'affaire ).
Effectivement, je n'utilisais pas les bonnes informations de connexions, c'est maintenant corrigé (tu vas donc devoir effacer les informations dans le fichier param pour que le script te les demande à nouveau)
Le script va maintenant essayer d'ajouter 2 fichiers sur ton serveur, test.txt et test2.txt.
Si l'un des 2 est bien présent, on aura fait une belle avancée, car cela me donnera une piste sur la syntaxe du chemin distant à utiliser.
Pour info, il y aura un message pour chaque fichier.
Le nouveau script est téléchargeable au même endroit.
PS: Je viens de songer à quelque chose, ton port de connexion FTP est bien le 21 ? Ou tu l'as modifié ?
- Edité par Blaster13 il y a environ 12 heures
Le port FTP est bien le port 21 (classique quoi) au cas où c'est un FTP d'OVH
Par contre toujours le même problème et me demande pour me fichier jarletch et que demande qu'une fois comme si tu avais reupload le même.
Et toujours le même souci pour la connection ftp
je vais réessayer je réedit si ça vient de moi.
REEDIT : ok pardon ça venait de moi je sais pas ce qui c'est passé
FilePut test.txt 0 et FilePut test2.text 0
Et aucun fichier sur le FTP
- Edité par QuentinTréheux 18 décembre 2018 à 9:31:01
Ca y est, j'ai enfin trouvé la raison de l'erreur (j'ai fait des tests persos, c'est plus simple quand on peut. )
C'était juste une question de '\' au lieu de '/' dans le chemin sur le serveur FTP.
Tu n'auras pas besoin de changer le chemin (sauf si tu le désires), j'ai fait en sorte de le corriger automatiquement.
D'accord je test cela demain, je te tiens au courant
Petite requête pourrai tu m'envoyer tout le code en pv sa m’intéresse de voir comment tu as fait tout ça et essayé de comprendre aussi (puis si je peux l'ajouter a mon rapport de stage en même temps XD)
Voici le code (autant en faire profiter à d'autres qui pourraient en avoir besoin):
#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é d'utiliser 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
$sUsername = IniRead($sCheminINI,"Param","user","")
If Not $sUsername 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
$sPass = IniRead($sCheminINI,"Param","mdp","")
If Not $sPass 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" & $sUsername, _encrypt_phrase_user(), $algo)) ;On décrypte la valeur récupérée
$sPassDecrypted = BinaryToString(_Crypt_DecryptData("0x" & $sPass, _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
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
Par contre enlève le chiffrage de l’identifiant et du mdp car du coup il ne se connecte pas au ftp et faut modifier manuellement dans le fichier ftp_param
Mais la je sais pas pourquoi y a rien qui fonctionne je n'arrive pas a me connecter au FTP "FTP_connection ERREUR=-1"
"Par contre enlève le chiffrage de l’identifiant et du mdp car du coup il ne se connecte pas au ftp et faut modifier manuellement dans le fichier ftp_param"
-> Euh... Non, justement pas, j'avais déjà corrigé cela.
"Mais la je sais pas pourquoi y a rien qui fonctionne je n'arrive pas a me connecter au FTP"
-> Justement parce que tu as saisi tes identifiants en clair dans le fichier de paramétrage.
Tu peux vérifier que les identifiants utilisés sont les bons en ajoutant ligne 75:
"Par contre enlève le chiffrage de l’identifiant et du mdp car du coup il ne se connecte pas au ftp et faut modifier manuellement dans le fichier ftp_param"
-> Euh... Non, justement pas, j'avais déjà corrigé cela.
"Mais la je sais pas pourquoi y a rien qui fonctionne je n'arrive pas a me connecter au FTP"
-> Justement parce que tu as saisi tes identifiants en clair dans le fichier de paramétrage.
Tu peux vérifier que les identifiants utilisés sont les bons en ajoutant ligne 75:
× 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.
Créateur de scripts d'automatisation en tout genre
Créateur de scripts d'automatisation en tout genre
Pas d'aide concernant le code par MP, le forum est là pour ça :)
Créateur de scripts d'automatisation en tout genre
Créateur de scripts d'automatisation en tout genre
Créateur de scripts d'automatisation en tout genre
Créateur de scripts d'automatisation en tout genre
Créateur de scripts d'automatisation en tout genre
Créateur de scripts d'automatisation en tout genre
Créateur de scripts d'automatisation en tout genre
Créateur de scripts d'automatisation en tout genre
Créateur de scripts d'automatisation en tout genre
Créateur de scripts d'automatisation en tout genre
Créateur de scripts d'automatisation en tout genre