je voudrais effectuer des transferts autmatiques de mon poste vers mon NAS
je crais une tache planifié sur windows
->1 transfert par jour a une heure precise sur un repertoire de mon NAS
l'ensemble fonctionne mais je dois finioler le script sous la forme: xcopy"C:\ABO" "N:\" /e /i
le but étant:le script doit créer un répertoire avec la date du jour dans le disque N du NAS, et si le transfert fonctionne il faudra qu'il supprime le repertoire C du pc (dois je utiliser une secondes tache planifié windows pour la suppression???)
merci pour votre avis
- Edité par FlorentOllier 26 janvier 2019 à 23:09:18
De ce que j'ai pu voir, le xcopy ne fait plus (depuis les versions de Windows supérieures à XP) de réel contrôle des données copiées.
C'est pourquoi il existe un utilitaire qui se nomme "xxcopy": http://xxcopy.com/xcpydnld.htm (section XXCOPY Freeware Package)
Une fois téléchargé, tu peux n'extraire que le fichier xxcopy.exe et le mettre dans un répertoire de la variable d'environement "PATH" (ex: C:\Windows\System32).
Tu lances ensuite une cmd en tant qu'administrateur et tu exécutes le fichier xxcopy.exe (à ne faire qu'une fois pour l'installation).
Tu pourras après utiliser le code:
cd N:
set foldername=%date:~-4,4%%date:~-10,2%%date:~7,2%
md %foldername%
xxcopy "c:\ABO" "N:\%foldername%" /E /I /RCY /PD0
Mais pour faire rapide: /E et /I :identiques à xcopy /RCY : Pour supprimer les fichiers sources une fois la copie réalisée avec succès, sans demande de confirmation /PD0: Pour ne pas avoir de demande de confirmation mais cette fois-ci pour la suppression des répertoires
J'ai créé un repertoire non un fichier dans c:\windows\System32
Il est composé du contenu que j'ai téléchargé sur le site que vous m avez envoyé (http://xxcopy.com/xcpydnld.htm), afin d installer le programme xxcopy j'ai exécuté le fichier.bat depuis mon nouveau répertoire crée dans System32
As-tu testé la méthode que je t'ai indiqué dans mon précédent post ? A savoir saisir:
"c:\windows\system32\nom de ton répertoire\xxcopy.exe" "C:\ABO" "N:\%foldername%" /E /I /RCY /PD0
Si cela ne fonctionne pas tu peux essayer la méthode que je t'ai indiqué dans mon premier post :
"Une fois téléchargé, tu peux n'extraire que le fichier xxcopy.exe et le mettre dans un répertoire de la variable d'environement "PATH" (ex: C:\Windows\System32).
Tu lances ensuite une cmd en tant qu'administrateur et tu exécutes le fichier xxcopy.exe (à ne faire qu'une fois pour l'installation)."
Saches que tu peux exécuter ton fichier bat depuis n'importe quel répertoire.
Tu as mis xxcopy dans un sous-répertoire "ABO" qui n'est certainement pas déclaré dans ta variable "PATH", il n'est donc pas installé.
Déplace ton xxcopy.exe dans "C:\Window\System32", puis tu lances une cmd en tant qu'admin et tu saisis:
xxcopy.exe
Il va certainement te dire qu'il ne s'agit pas de la dernière version (j'ai eu quelque chose de ce style) mais tu lui dis de continuer quand même. Une fois que l'utilitaire sera installé, tu pourras lancer ton bat.
donc si je lance le bat, le répertoire "iso JEUX" du disque C sera copié sur ma clef pour lettre X dans un repertoire annéejourmois
je lance le bat
en suite
et en suite un chargement et visiblement un transfert est effectué sur ma clef
je controle sur ma clef il y a bien un transfert effectué...
resultat des deux tests:
le 1er bat ne fonctionne pas avec un disque sur reseau (pour mon cas mon NAS monté en disque réseau pour lettre N)
Je me trompe????😶
le 2 eme bat provoque une copie de fichier mais d'une maniere incorrect (ne correspond pas a c:\iso JEUX), voir le second screenshot il y a les chemins des divers copie...
Je suis noyé
Pourquoi? 🤨🤔🤔
je suis perdu... completement...
- Edité par FlorentOllier 5 février 2019 à 23:15:11
Le bon point c'est que le script commence à réagir, pour le message concernant le template, je pense qu'il est dû au fait que les chemins ne se terminent pas par un "\" (au moins pour la source, mais mieux vaut le mettre à la fin de la destination également).
Continuons à tester sur la clé et une fois que ce sera opérationnel, on verra ce qu'il en est sur le réseau.
PS: Pour ne pas que le script se ferme avant de voir ce qui a causé l'erreur, tu peux ouvrir une console cmd, puis taper le chemin complet vers ton fichier bat et "Entrée".
Si cela permet bien de passer le message demandant d'appuyer sur une touche, il suffira d'ajouter la ligne suivante pour supprimer le répertoire du bureau:
rd %userprofile%\desktop\%foldername%
Par contre si cela ne fonctionne pas, je pourrai te réaliser un script qui fait ce que tu souhaites, ce sera plus simple (du moins pour moi ).
PS: Tout cela est simplement dû à la limitation de la version gratuite de l'utilitaire...
PS2: J'ai mis à jour mon post à 22H12 si jamais tu l'as déjà lu avant.
Il n'y a pas de source en fait, mais je n'avais testé le code que dans un nouveau bat. Pour pouvoir le "mêler" à ton code existant, tu dois ajouter des "@" en début de ligne et des ";" à la fin, ce qui donne quelque chose de l'ordre de:
Les paramètres (source, destination, gabarit du nom du répertoire) seront mémorisés dans un fichier "ParamTransfert.ini" qui se trouvera dans le même répertoire que le script (tu pourras modifier les valeurs directement dans ce fichier ou supprimer le fichier pour qu'ils soient redemandés).
Si besoin, voici les sources du script (AutoIt):
$sIniPath = @ScriptDir & '\ParamTransfert.ini'
;Initialisation du chemin de la source
$sSourcePath = IniRead($sIniPath,'Param','source','')
While Not $sSourcePath
$sSourcePath = InputBox('Source','Veuillez indiquer le chemin de la source:','C:\iso JEUX','',230,130)
If @error Then Exit
IniWrite($sIniPath,'Param','source',$sSourcePath)
WEnd
;Initialisation du chemin de la destination
$sDestinationPath = IniRead($sIniPath,'Param','destination','')
While Not $sDestinationPath
$sDestinationPath = InputBox('Destination','Veuillez indiquer le chemin de la destination (sans le nom du répertoire comportant la date):','N:','',265,140)
If @error Then Exit
IniWrite($sIniPath,'Param','destination',$sDestinationPath)
WEnd
;Initialisation du gabarit du nom du dossier comportant la date sous la forme AA(AA)=Année, MM=Mois, JJ=Jour
$sTemplateFolderName = IniRead($sIniPath,'Param','gabarit','')
While Not $sTemplateFolderName
$sTemplateFolderName = InputBox('Gabarit du nom du dossier','Veuillez indiquer le gabarit du nom du répertoire comportant la date:','AAAAMMJJ','',230,140)
If @error Then Exit
IniWrite($sIniPath,'Param','gabarit',$sTemplateFolderName)
WEnd
$sSourcePath = _FormatedPath($sSourcePath)
$sDestinationPath = _FormatedPath($sDestinationPath )
$sTemplateFolderName = _FormatedTemplate($sTemplateFolderName)
$sCompleteDestinationPath = $sDestinationPath & $sTemplateFolderName
;------------------------------------------------------------- Début du Traitement -------------------------------------------------------------
;On crée le répertoire avec la date dans la destination
DirCreate($sCompleteDestinationPath)
;On lance la copie avec contrôle
$bSuccessCopy = 0
$nTries = 1
Do
$bSuccessCopy = DirCopy($sSourcePath,$sCompleteDestinationPath,1) ;On copie et on écrase le contenu s'il existe déjà
If Not $bSuccessCopy Then
Sleep(500) ;Pause dans le cas ou la copie échoue, afin de ne pas enchainer trop rapidement les essais
$nTries+=1
If $nTries > 10 Then
MsgBox(16,'Erreur de copie','Impossible de copier les données dans:' & @CRLF & $sCompleteDestinationPath)
EndIf
EndIf
Until $bSuccessCopy
;On supprime le dossier source et tout son contenu
DirRemove($sSourcePath,1)
;--------------------------------------------------------------- Fin du Traitement ---------------------------------------------------------------
Func _FormatedPath($sPath)
$nTrailingBackslash = StringCompare(StringRight($sPath,1),'\')
If $nTrailingBackslash <> 0 Then $sPath &= '\'
Return $sPath
EndFunc
Func _FormatedTemplate($sTemplate)
$sTemplate = StringReplace($sTemplate,'AAAA',@YEAR)
$sTemplate = StringReplace($sTemplate,'AA',StringRight(@YEAR,2)) ;Permet de définir l'année sur 2 caratères (si souhaité)
$sTemplate = StringReplace($sTemplate,'MM',@MON)
$sTemplate = StringReplace($sTemplate,'JJ',@MDAY)
Return $sTemplate
EndFunc
l exe que tu as programmé provient de "AutoIt": Il a été créé dans le language d'AutoIt pour être plus exact
pour des contrainte que j'ignore tu as opté pour se process au lieux de xxcopy: Tout simplement car je maitrise beaucoup plus cet outil que le batch et encore plus que xxcopy qui a, comme nous l'avons constaté, des limites lorsqu'il s'agit de faire des copies sur le réseau.
afin de comprendre (pour moi meme, purement perso, pour rien ma culture technique...) as-tu des sources pour creer se genre de programme?: Je crois qu'on peut faire difficilement mieux que celles que j'ai mis dans mon précédent post, c'est la copie conforme de la source de mon script. Tu peux télécharger AutoIt et compiler toi-même le script, cela fonctionnera de la même manière.
est ce que se script est excetuble depis un invite de ommande (je voudrais automatiser des taches planifier windows qui lancerai un bat...): Tout à fait, il suffit de saisir les paramètres demandés au premier lancement, puis de laisser le fichier "ParamTranfert.ini" dans le même répertoire que l'exécutable du script pour que ces paramètres soient pris en compte. Ensuite tu tapes depuis ta cmd le chemin du script et c'est fini. Tu peux même directement utiliser une tache planifiée qui exécute le script.
je ne sais pas si a titre perso tu tiens un tutto perso ou autre afin de faire progresser les BLEUcomme moi... ?: Il y a déjà beaucoup de tuto sur le Net (et notamment sur OpenClassrooms), je ne vois pas trop ce que je pourrais ajouter de plus. Si tu veux te lancer dans ce type de développement et que tu as besoin d'aide, je pourrais tenter de t'aider.
Ah beh non, il n'y a pas de magie , j'ai juste était tès motivé il y a quelques années à réaliser des scripts pour automatiser des taches "rébarbatives" ou sans valeur ajoutée, puis j'ai fait des recherches sur le Net, et je suis tombé sur ce magnifique langage.
Je le trouve intuitif, et l'aide intégrée à l'éditeur "Scite", également disponible sur le site d'AutoIt (https://www.autoitscript.com/site/autoit/downloads/) permet de rechercher par mot clé (en anglais).
Après il faut savoir que j'utilse AutoIt depuis près de 10 ans, donc ce genre de script qui utilise des actions "basiques" (créer un répertoire, copier des données, supprimer des données) j'en ai fait des dizaines, et cela ne me prend plus trop de temps à en réaliser (environ 2H le temps de le mettre au propre), ce qui est plus simple, pour moi, que de chercher une solution tierce qui plus est payante pour être adaptée à ton besoin.
Comme on le dit souvent le langage n'est pas forcément le plus important, une fois que tu sais définir ton besoin ("mini" cahier des charges), et que tu décomposes les fonctionnalités nécessaires, il ne te reste "plus qu'à" écrire le code pour réaliser chacunes d'entres elles dans l'ordre.
L'important pour se lancer, est de trouver un projet suffisament motivant à tes yeux et accessible, pour ne pas se décourager à la première difficulté.
× 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
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
Créateur de scripts d'automatisation en tout genre
Créateur de scripts d'automatisation en tout genre