[R] Script de sauvegarde....

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
r140
Niveau 2
Niveau 2
Messages : 28
Enregistré le : sam. 27 oct. 2007 15:31
Status : Hors ligne

[R] Script de sauvegarde....

#1

Message par r140 »

Bonjour,

Je souhaiterai créer une console qui permet de vérifier les résultats de plusieurs commandes externes passés à la suite des autres afin de créer un système de sauvegarde.
J'utilise actuellement des script batch en ligne de commande.

Existe t'il une équivalence à la commande subst du dos en autoit?


Merci par avance.
Modifié en dernier par r140 le mar. 06 nov. 2007 09:56, modifié 1 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: Script ou cmd

#2

Message par Tlem »

r140 a écrit :Existe t'il une équivalence à la commande subst du dos en autoit?
DriveMapAdd
sinon, vous pouvez utiliser la commande Run pour lancer une commande DOS ...

PS: Le début de la question, n'est pas très clair !
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
r140
Niveau 2
Niveau 2
Messages : 28
Enregistré le : sam. 27 oct. 2007 15:31
Status : Hors ligne

Re: Script ou cmd

#3

Message par r140 »

Mon projet est de créer un script de sauvegarde des fichiers du disque, je voudrai créer un script autoit pour faire cela.

Pour faire cela je voudrai remplacer au maximum les commandes externes car elles me posent problèmes avec les environnements lié à runas as (je souhaite protéger mon dossier de sauvegarde afin que seul l'utilisateur sauvegarde et l'administrateur y est accès).

Le problème est le suivant je souhaite consulter le résultat de mes commandes, mais sans le msgbox,dans une fenêtre du type edit.

Pouvez vous me donner des pistes pour ce programme ?

Merci





Tlem a écrit :
r140 a écrit :Existe t'il une équivalence à la commande subst du dos en autoit?
DriveMapAdd
sinon, vous pouvez utiliser la commande Run pour lancer une commande DOS ...

PS: Le début de la question, n'est pas très clair !
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: Script ou cmd

#4

Message par Tlem »

r140 a écrit :Le problème est le suivant je souhaite consulter le résultat de mes commandes, mais sans le msgbox,dans une fenêtre du type edit.
Désolé, je crois que je suis complètement polio ce soir, j'ai beau relire, je ne comprend toujours pas ce que vous chercher à faire !!!
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
r140
Niveau 2
Niveau 2
Messages : 28
Enregistré le : sam. 27 oct. 2007 15:31
Status : Hors ligne

Re: Script ou cmd

#5

Message par r140 »

Bonjour,

Je pense que c'est le point le plus difficile à expliquer,

je vais donnée un exemple concret, je souhaite avoir le résultat des commandes, comme lorsque on tape une commande cmd les une à la suite des autres dans un batch,
ou comme la création d'un iso lors de la compilation d'un cd bart:
Image
Je pense que ça sera plus clair.... ;-)

Tlem a écrit :
r140 a écrit :Le problème est le suivant je souhaite consulter le résultat de mes commandes, mais sans le msgbox,dans une fenêtre du type edit.
Désolé, je crois que je suis complètement polio ce soir, j'ai beau relire, je ne comprend toujours pas ce que vous chercher à faire !!!
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

#6

Message par ani »

tu veux creer une sortie (stdout), debugger (comme sur l'image) ,comme scite , rien de plus simple
regarde du coté édit, pour renvoyé dans le édit (guictrlsetdata)

Dispose un petit bout de code
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

#7

Message par Tlem »

Effectivement, comme le dit ani, si vous voulez lire le résultat d'une commande externe, et la retranscrire dans votre script, alors utiliser l'exemple donner pour la commande StdoutRead dans l'aide de AutoIt.

Si c'est pour retranscrire le résultat d'une commande AutoIt, servez vous du résultat retourner par cette commande.
Comme par exemple pour DriveMapAdd :

Code : Tout sélectionner

$Res = DriveMapAdd("X:", "\\myserver\stuff")
Selon la doc AutoIt de la commande DriveMapAdd, voici les résultats possibles :
When the function fails (returns 0) @error contains extended information:
1 = Undefined / Other error. @extended set with Windows API return
2 = Access to the remote share was denied
3 = The device is already assigned
4 = Invalid device name
5 = Invalid remote share
6 = Invalid password
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
r140
Niveau 2
Niveau 2
Messages : 28
Enregistré le : sam. 27 oct. 2007 15:31
Status : Hors ligne

script de sauvegarde

#8

Message par r140 »

Merci de vos réponses...

La commande drivemapadd ne permet pas de créer un lecteur virtuel lorsque la source est en local.

Exemple:
$res=DriveMapAdd("X:", "D:\mesdocs")
Ne créer pas de lecteur vituel X:,la commande reste sans résultat, je pense que c'est normal car elle est conçu pour les partages réseaux.

Si une personne
Merci
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

#9

Message par ani »

je ne connait ni l'un ni lautre (n'ayant pour le moment jamais eu a les utiliser.

ps : le subst on l'utilse pour quel circontance ? iis/ftp ?ou comme un raccourci, merci d'avance

sinon tu peux utiliser la fonction dos dans ton programme autoit
et renvoié les info du dos vers le édit

lance l'aide d'autoit va sur onglet recherche et tape std
tu obtiendra 4 sortie normalement (je dois avoir une démo quelque part sur la machine)
r140
Niveau 2
Niveau 2
Messages : 28
Enregistré le : sam. 27 oct. 2007 15:31
Status : Hors ligne

script de sauvegarde

#10

Message par r140 »

Je vous donnerai l'avancement et les questions de mon projet sur ce sujet

Pour l'instant j'essaie d'avoir des résultats avec la commandes dir


Réponse au PS
La commande subst simplifie la gestion des dossier:

D:\sauvedocs\mesdocs\r140\
subst s: "D:\sauvedocs\mesdocs\r140"
dir s: ->affiche le contenu du dossier D:\sauvedocs\mesdocs\r140\

Il permet aussi de faciliter la modification des chemins d'accès, au lieu de modifier 10, on en change qu'un seul,cela est plus gérable et permet de faire moins d'erreurs
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

#11

Message par ani »

d'accord :)


voici un petit exemple a modifier merci d'avance
tu tape n'importe cmd tu la recoi dans le edit (vu que je retrouve plus mon projet dos en gui :( , navré, )

Code : Tout sélectionner

#include <GUIConstants>
;#include <File> ; le file ne sert pas dans l'exemple
#include <Constants>
Opt("GUIOnEventMode", 1); tu utilise le event mode (lire chapitre)
Opt("TrayIconHide", 1)

$Gui = GUICreate("Dos_Gui ?", 378, 305, 193, 115)
GUISetOnEvent($GUI_EVENT_CLOSE, "quitter")
$Input1 = GUICtrlCreateInput("", 16, 16, 345, 21)
GUICtrlSetOnEvent($Input1,"cmd")
$Edit1 = GUICtrlCreateEdit("", 16, 48, 345, 233)
GUISetState(@SW_SHOW,$Gui)

While 1
sleep(100)
WEnd

Func cmd()
$line = ""
$d = GUICtrlRead($Input1)
$foo = Run(@ComSpec & " /c " & $d, @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
While 1
$line = $line & StdoutRead($foo)
If @error Then ExitLoop
GUICtrlSetData($Edit1, $line)
Wend

While 1
$line = StderrRead($foo)
If @error Then ExitLoop
MsgBox(0, "STDERR read:", $line)
Wend
EndFunc
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: script de sauvegarde

#12

Message par Tlem »

r140 a écrit :La commande subst simplifie la gestion des dossier:

D:\sauvedocs\mesdocs\r140\
subst s: "D:\sauvedocs\mesdocs\r140"
dir s: ->affiche le contenu du dossier D:\sauvedocs\mesdocs\r140\
Pourquoi vous compliquer la vie comme ceci ?

Avec AutoIt, faites tout simplement :

Code : Tout sélectionner

$Drv = "D:\sauvedocs\mesdocs\r140" 
Run ( @ComSpec & " /c dir " & '"' & $Drv & '"' )
Sinon, vous avez encore plus cool :

Code : Tout sélectionner

#include <File.au3>
#include <array.au3>
$Drv = "C:\windows" 
$Res = _FileListToArray ( $Drv , "*.Dat" , 1 ) 
_ArrayDisplay ( $Res )
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
r140
Niveau 2
Niveau 2
Messages : 28
Enregistré le : sam. 27 oct. 2007 15:31
Status : Hors ligne

Re: script de sauvegarde

#13

Message par r140 »

Merci de cette solution....

Mais dans ce cas j'ai un autre problème qui se pose, peux t'on utiliser des variables déjà déclarer dans un autre script

$Drv déclarer dans sauve_principal.au3
Sauve_principale fait appel sauve_doc.au3

Merci par avance
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: script de sauvegarde

#14

Message par Tlem »

r140 a écrit :Mais dans ce cas j'ai un autre problème qui se pose, peux t'on utiliser des variables déjà déclarer dans un autre script

$Drv déclarer dans sauve_principal.au3
Sauve_principale fait appel sauve_doc.au3
Sans aucun problème.

2 solutions :
- Passer votre variable par l'intermédiaire d'un fichier temp, ou une clé de la base de registre (Assez lourd)

ou mieux :

- Passer votre variable en paramètre à une des fonctions de sauve_doc.au3.
Imaginons que dans sauve_doc.au3 il y ait une fonction comme ceci :

Code : Tout sélectionner

Func SauveDoc ( $Drv ) 
$Res = _FileListToArray ( $Drv , "*.Dat" , 1 ) 
Return $Res
EndFunc
Tout simplement, dans sauve_principal.au3 vous rajouter #Include<sauve_doc.au3>, et lorsque vous en avez besoin, vous faites appel à la fonction de sauve_doc.au3 comme ceci :

Code : Tout sélectionner

$Drv = "C:\windows" 
$Resultat = SauveDoc ( $Drv )
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
r140
Niveau 2
Niveau 2
Messages : 28
Enregistré le : sam. 27 oct. 2007 15:31
Status : Hors ligne

Re: script de sauvegarde

#15

Message par r140 »

Voici ce que j'ai créer, il y a surement des amélioration à faire...

Code : Tout sélectionner

#include <Constants.au3>
#include <GUIConstants.au3>
Dim $out , $err , $run , $line1 , $line2 , $myedit , $myedit2 , $SauveDest , $TEMP , $nberr , $sauveProv 
$temp = EnvGet ( "TEMP" ) 
$sauveProv = EnvGet ( "SystemDrive" ) & "\sauvedoc" 
GUICreate ( "Sauvegarde du PC..." ) 
GUISetState ( ) 
$out = "Sauvegarde en cour..." & @CRLF 
If not FileExists ( "7za.exe" ) then 
$err = $err & "Le fichier 7za.exe n'a pas été trouvé , il fait partie du logiciel 7zip , celui ci est nécéssaire pour la sauvegarde" 
$nberr = 1 
Call ( "LireSortie" ) 
Call ( "error" ) 
Exit
Else
EndIf
$SauveDest = IniRead ( "sauvedoc.ini" , "sauve" , "SauveDest" , "NotFound" ) 
If $SauveDest = "NotFound"Or $SauveDest = "" then IniWrite ( "sauvedoc.ini" , "sauve" , "SauveDest" , $sauveProv ) 
$SauveDest = $sauveProv 
Else
EndIf
MsgBox ( 0 , "verif" , """" & @UserProfileDir & "\Application Data\thunderbird\Profiles\*.*""" ) 
$out = $out & "Vital:Bureau , Favorie , mail dossier sauvegarder sous" & $SauveDest & @CRLF 
Call ( "LireSortie" ) 
$run = Run ( @ComSpec & " /c 7za.exe u - r - tzip " & $SauveDest & "\" & @UserName & "\profile\bureau\Bureau.zip" & " " & """" & @UserProfileDir & "\bureau\*.*""" & " - w" & $temp , "" , @SW_HIDE , $STDERR_CHILD + $STDOUT_CHILD ) 
$proc1 = ProcessExists ( "7za" ) 
Call ( "Process" ) 
Call ( "LireSortie" ) 
$run = Run ( @ComSpec & " /c 7za.exe u - r - tzip " & $SauveDest & "\profile\favoris\FavorisIE.zip" & " " & """" & @UserProfileDir & "\favoris\*.*""" & " - w" & $temp , "" , @SW_HIDE , $STDERR_CHILD + $STDOUT_CHILD ) 
Call ( "Process" ) 
Call ( "LireSortie" ) 
$run = Run ( @ComSpec & " /c 7za.exe u - r - tzip " & $SauveDest & "\profile\firefox\Bookmark\Bookmark_firefox.zip" & " " & """" & @UserProfileDir & "\Application Data\Mozilla\Firefox\Profiles\Bookmark*.*""" & " - w" & $temp , "" , @SW_HIDE , $STDERR_CHILD + $STDOUT_CHILD ) 
Call ( "Process" ) 
Call ( "LireSortie" ) 
$run = Run ( @ComSpec & " /c 7za.exe u - r - tzip " & $SauveDest & "\profile\mail\thunderbird.zip" & " " & """" & @UserProfileDir & "\Application Data\thunderbird\Profiles\*.*""" & " - w" & $temp , "" , @SW_HIDE , $STDERR_CHILD + $STDOUT_CHILD ) 
Call ( "Process" ) 
Call ( "LireSortie" ) 
$run = Run ( @ComSpec & " /c 7za.exe u - r - tzip " & $SauveDest & "\sauvedd.zip" & " *.* - w" & $temp , "" , @SW_HIDE , $STDERR_CHILD + $STDOUT_CHILD ) 
Call ( "Process" ) 
Call ( "LireSortie" ) 
$myedit = GUICtrlCreateEdit ( $out & @CRLF , 25 , 32 , 300 , 150 , $ES_AUTOVSCROLL + $WS_VSCROLL ) 
$myedit2 = GUICtrlCreateEdit ( $err & @CRLF , 25 , 200 , 300 , 150 , $ES_AUTOVSCROLL + $WS_VSCROLL ) 
Func LireSortie ( ) 
While 1
$line1 = StdoutRead ( $run ) 
If @error Then ExitLoop
$out = $out & @CRLF & $line1 
Wend
While 1
$line2 = StderrRead ( $run ) 
If @error Then ExitLoop
$nberr = $nberr + 1 
$err = $err & @crlf & $line2 
Wend
EndFunc
Func Process ( ) 
while 1
If ProcessExists ( "7za.exe" ) Then 
Sleep ( - 1 ) 
ExitLoop
Else
ExitLoop
EndIf
wend
EndFunc
Func error ( ) 
$myedit = GUICtrlCreateEdit ( $out & @CRLF , 25 , 32 , 300 , 150 , $ES_AUTOVSCROLL + $WS_VSCROLL ) 
$myedit2 = GUICtrlCreateEdit ( $err & @CRLF , 25 , 200 , 300 , 150 , $ES_AUTOVSCROLL + $WS_VSCROLL ) 
MsgBox ( 48 , "Erreur" , "Terminé avec " & $nberr & " erreur ( s ) ..." ) 
While 1
$msg = GUIGetMsg ( ) 
If $msg = $GUI_EVENT_CLOSE Then ExitLoop 
Wend
EndFunc
While 1
$msg = GUIGetMsg ( ) 
If $msg = $GUI_EVENT_CLOSE Then ExitLoop 
Wend
MsgBox ( 0 , "Debug" , "Exiting..." ) 
Exit
Avatar du membre
Voodoo
Niveau 6
Niveau 6
Messages : 298
Enregistré le : ven. 20 juil. 2007 20:45
Status : Hors ligne

#16

Message par Voodoo »

Quelques petites remarques !
  • FileExists ( "7za.exe" ) cela sous entend que le script fonctionne dans le repertoire de 7zip...il vaudrait mieux utiliser un regread() pour connaitre le repertoire d'installation de 7zip.
  • Il faut crée ta fenetre avec tous les elements puis après modifier les elements. Ton edit est crée dans la fonction error ce qui n'est pas normal. Voila le schema standard:

    Include ...

    Guicreate...

    guisetstate()

    While 1

    Wend

    Fonction() ...
  • L'instruction call n'est pas necessaire fonction() suffit.
  • Sleep ( - 1 ) Tu remontes le temps :lol: ? c'est sleep(1) !
  • Une seule fonction While 1 suffit ! la plus par des instructions sont en double il faut les réunir !
Courage !
Modifié en dernier par Voodoo le mar. 06 nov. 2007 11:30, modifié 1 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

#17

Message par Tlem »

Bonsoir r140.

J'avais commencé les mêmes recommandations que Voodoo, mais comme il m'a devancé ...
Voici la suite :

Vous utilisé pour récupérer une variable d'environnement, la fonction EnvGet().
Sachez qu'il est possible avec AutoIt d'avoir la variable directement.
Au lieu de faire : $temp = EnvGet ( "TEMP" ) je vous conseil d'utiliser la variable @tempdir.
Idem pour EnvGet ( "SystemDrive" ) qui peut être remplacer par @SystemDir.
Dans l'aide de AutoIt, faites une recherche sur Macro Reference pour avoir la liste de toutes les valeurs qui peuvent être récupérer par AutoIt .
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
r140
Niveau 2
Niveau 2
Messages : 28
Enregistré le : sam. 27 oct. 2007 15:31
Status : Hors ligne

Script de sauvegarde....

#18

Message par r140 »

Bonjour,

Merci pour les remarques, je les utiliserai, la seule chose est le sleep(-1), qui est "normale", ce voulais faire au départ c'était un runwait() mais cette fonction ne dispose pas des arguments "$STDERR_CHILD + $STDOUT_CHILD", je veux attendre qu'une commande se termine avant de commencer la suivante et si possible pouvoir la débbugger (non présent dans mon script pour l'instant).

Merci
Répondre