[R] Attributs besoins d'éclaircissements ! Merci Jguinch :D

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
eferlan
Niveau 2
Niveau 2
Messages : 15
Enregistré le : lun. 30 déc. 2013 03:19
Localisation : Corse
Status : Hors ligne

[R] Attributs besoins d'éclaircissements ! Merci Jguinch :D

#1

Message par eferlan »

Bonsoir,

Je crée des petits programmes pour me faciliter la vie pour les dépannages informatiques et autres...
et donc récemment sa fait quelques jours que j'essaye de toucher aux attributs Windows, la lecture seule des dossiers plus particulièrement et donc j'essaye désespéramment de l’intégrer mais ça ne fonctionne pas...

Donc en gros le concept c'est de supprimer l'intégralité d'un dossier sauf que quand un sous-dossiers ou fichier à l'intérieur est en lecture seule sa pose problème. Et donc après quelques recherche j'ai beau essayer de toutes les manières qui me semble logiques ça veut pas.
- http://autoitscript.fr/forum/viewtopic.php?f=3&t=10489
- https://www.autoitscript.com/forum/topi ... ble-macro/
- https://www.autoitscript.com/autoit3/do ... Attrib.htm

Voici ce que j'ai pu trouver...

Voici mon code :

Code : Tout sélectionner

Case $Button1
            FileSetAttrib("C:\Users\portable\Desktop\Nouveau dossier\", "-RASH", $FT_RECURSIVE (1) )
J'ai prit un dossier sur mon bureau pour tester, d'ailleurs si au passage on pourrait me rappeler la variable pour le rendre utilisable sur n'importe quel pc C:\Users\@USER\Desktop\Nouveau dossier\ pour l'utilisateur...
Donc ça fonctionne pas j'ai essayer sans le $FT_RECURSIVE (1) ( je sais même pas à quoi sa sert ) enfin bref la documentation est pas très explicite comme très souvent ce qui est frustrant !

Si une personne s'y connaissant pourrais m'expliquer sa serait vraiment sympathique !
Merci, Eferlan.
Modifié en dernier par eferlan le mer. 02 déc. 2015 20:22, modifié 1 fois.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2511
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Attributs -RASH... besoins d'éclaircissements !

#2

Message par jguinch »

La doc est pour moi très explicite, mais tout le monde n'a pas le même niveau de compréhension.
Si je créé un dossier nommé "remove" sur le bureau, dans lequel je place un fichier en lecture seule, DirRemove peut supprimer le dossier.Il suffit de lui préciser l'argument recurse avec comme valeur $DIR_REMOVE (ou 1) pour forcer la suppression du dossier même s'il n'est pas vide.

Pour rappel, il existe une documentation traduite en français : http://www.autoitscript.fr/forum/viewto ... =7&t=13797
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
eferlan
Niveau 2
Niveau 2
Messages : 15
Enregistré le : lun. 30 déc. 2013 03:19
Localisation : Corse
Status : Hors ligne

Re: [..] Attributs -RASH... besoins d'éclaircissements !

#3

Message par eferlan »

En réalité j'ai du mal à comprendre quelque chose si je comprend pas l’intégralité du système... C'est comme quand on vous donne une formule en maths et qu'on vous demande de l'appliquer sans réfléchir sans comprendre comment elle fonctionne bah moi ce genre de chose sa me bloque...

Y'a des points qui sont encore flous, tout ce qui précède $ est une variable normalement non ? Donc quand on met : $DIR_REMOVE (qui n'est pas dans la doc au passage) pour moi c'est une variable qui n'a aucune valeur puisque je ne lui en attribut pas... M'enfin bref si je me contente d'appliquer bêtement si j'ai bien compris sa donne :

Code : Tout sélectionner

Case $Button1
            FileSetAttrib("C:\Users\portable\Desktop\Nouveau dossier\", "-RASH", $DIR_REMOVE (1) )
Visiblement j'ai mal compris car j'obtient sa :
Image

à propos de la doc en français que vous m'avez donner (merci au passage) mais malheureusement sa ne fonctionne pas :
Image
Là on le voit pas sur l'image mais en réalité peut importe la catégorie y'a rien qui s'affiche sur la droite.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2511
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Attributs -RASH... besoins d'éclaircissements !

#4

Message par jguinch »

Ce que je tentais d'expliquer dans mon message précédent, c'est que la suppression du dossier ne nécessite pas la suppression des attributs lecture seule. Il est possible de supprimer un répertoire avec la fonction DirRemove. Si le dossier n'est pas vide, il faudra utiliser utiliser le paramètre $DIR_REMOVE (ou la valeur 1).

Comme tu as certainement une version AutoIt antérieure à la version 3.3.14.2, c'est pour ça que tu n'as pas $DIR_REMOVE dans la doc. Tu peux utiliser 1 à la place (regarde la doc de DirRemove dans ton fichier d'aide).

Pour ce qui est de la variable $DIR_REMOVE, je vais quand t'expliquer...

D'abord, ouvre la doc de la fonction DirRemove ici (c'est la doc de la dernière version) : https://www.autoitscript.com/autoit3/do ... Remove.htm
Tu vois que le deuxième paramètre accepte comme valeur $DIR_DEFAULT (0) ou $DIR_REMOVE (1).
Ce qui veut dire que tu peux utiliser $DIR_DEFAULT ou $DIR_REMOVE comme paramètre lors de l'appel de la fonction.

Ces variables prédéfinies peuvent être utilisées dans les appels de fonctions. Ces variables ne sont pas natives, elles sont déclarées dans des scripts à appeler en début de code.
Dans la doc de la page DirRermove, il est précisé ceci : Constants are define in "AutoItConstants.au3". Ce qui veut dire que pour utiliser ces variables tu devras d'abord faire appel à AutoItConstants.au3 en début de script, en ajoutant la ligne #Include <AutoItConstants.au3>
Tu auras donc un code comme celui-là :

Code : Tout sélectionner

#Include <AutoItConstants.au3>
DirRemove(@DesktopDir & "\dossier", $DIR_REMOVE)
 
Tu peux tout à faire utiliser la valeur numérique directement et donc te passer de l'include :

Code : Tout sélectionner

DirRemove(@DesktopDir & "\dossier", 1)
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
eferlan
Niveau 2
Niveau 2
Messages : 15
Enregistré le : lun. 30 déc. 2013 03:19
Localisation : Corse
Status : Hors ligne

Re: [R] Attributs... besoins d'éclaircissements ! Merci jgui

#5

Message par eferlan »

Ok, je comprend mieux c'est beaucoup plus clair merci d'avoir prit le temps de m'expliquer tout ça c'est vraiment très gentil !

Si sa intéresse voici le code complet qui sert quand les màj windows fonctionne plus ou ne se lance pas, cela efface le dossier qui contient les màj déjà téléchargées qui sont souvent en conflit surtout sous windows 8/8.1
Pour supprimer le dossier en question il faut désactiver le service de Windows Update, qu'on réactive juste après... Petit gain de temps (et de flemmardise) quand on enchaîne plusieurs pc !

Encore merci à toi Jguinch !

Code : Tout sélectionner

#RequireAdmin
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("", 245, 40, 192, 114)
$Label1 = GUICtrlCreateLabel("Windows Update", 0, 8, 134, 23, $SS_CENTERIMAGE)
GUICtrlSetFont(-1, 12, 800, 0, "Arial")
$Button1 = GUICtrlCreateButton("Clean", 144, 8, 89, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            ProgressOn("Progress", "En cours", "")
            Run(@ComSpec & " /k " & 'net stop wuauserv', "", @SW_HIDE)
            ProgressSet(30)
            Sleep(1500)
            ProgressSet(45)
            DirRemove("C:\Windows\SoftwareDistribution", 1)
            ProgressSet(60)
            Sleep(1500)
            ProgressSet(75)
            Run(@ComSpec & " /k " & 'net start wuauserv', "", @SW_HIDE)
            ProgressSet(100)
            Sleep(800)
            Exit
    EndSwitch
WEnd
 
Fichiers joints
Update Clean.au3
(1004 Octets) Téléchargé 189 fois
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2511
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [R] Attributs besoins d'éclaircissements ! Merci Jguinch

#6

Message par jguinch »

Tu devrais remplacer /k par /c dans tes commandes Run et plutôt utiliser RunWait :

Code : Tout sélectionner

RunWait(@ComSpec & " /c net start wuauserv", "", @SW_HIDE)
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
eferlan
Niveau 2
Niveau 2
Messages : 15
Enregistré le : lun. 30 déc. 2013 03:19
Localisation : Corse
Status : Hors ligne

Re: [R] Attributs besoins d'éclaircissements ! Merci Jguinch

#7

Message par eferlan »

Ok je vois c'est vrai que runwait c'est pas mal j'avais déjà vu ça mais je savais pas que ça s'utilisait comme ça merci :D
Ducoup voici la version améliorée :

Code : Tout sélectionner

#RequireAdmin
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=Windows_Update_icon_by_Creato937.ico
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("", 245, 40, 192, 114)
$Label1 = GUICtrlCreateLabel("Windows Update", 0, 8, 134, 23, $SS_CENTERIMAGE)
GUICtrlSetFont(-1, 12, 800, 0, "Arial")
$Button1 = GUICtrlCreateButton("Clean", 144, 8, 89, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            ProgressOn("Progress", "En cours", "")
            ProgressSet(30)
            RunWait(@ComSpec & " /c net stop wuauserv", "", @SW_HIDE)
            ProgressSet(45)
            DirRemove("C:\Windows\SoftwareDistribution", 1)
            ProgressSet(60)
            RunWait(@ComSpec & " /c net start wuauserv", "", @SW_HIDE)
            ProgressSet(100)
            Sleep(800)
            Exit
    EndSwitch
WEnd
 
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [R] Attributs besoins d'éclaircissements ! Merci Jguinch

#8

Message par orax »

Par contre je ne vois pas en quoi le @ComSpec & " /c est vraiment utile. net n'est pas une commande interne DOS (comme dir par exemple) donc j'aurais fait directement...

Code : Tout sélectionner

RunWait("net start wuauserv", "", @SW_HIDE)
Et aussi, si le script peut être utilisé par d'autres personnes il faudrait éviter de mettre "en dur" les chemins dans le code. Windows n'est pas forcément installé dans C:\Windows. Donc C:\Windows deviendrait @WindowsDir
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2511
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [R] Attributs besoins d'éclaircissements ! Merci Jguinch

#9

Message par jguinch »

Orax, ta remarque concernant la commande net est intéressante, c'est une interrogation qui revient de temps en temps. Perso, j'aime bien exécuter les commandes de type console dans la console, histoire de pouvoir débugger plus facilement (avec un /K). Mais pour un script fini (compilé, prêt à l'emploi), il n'y a pas forcément de raison de passer par cmd.
Je vois pas trop l'intérêt, c'est vrai, mais ça aussi une question d'habitude peut-être... :|
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
eferlan
Niveau 2
Niveau 2
Messages : 15
Enregistré le : lun. 30 déc. 2013 03:19
Localisation : Corse
Status : Hors ligne

Re: [R] Attributs besoins d'éclaircissements ! Merci Jguinch

#10

Message par eferlan »

orax a écrit :Par contre je ne vois pas en quoi le @ComSpec & " /c est vraiment utile. net n'est pas une commande interne DOS
Je suis pas un expert en dos donc je comprend pas exactement ce que tu veut dire mais la commande net start je l'utilise dans l'invite de commande donc il est logique d'utiliser @ComSpec, merci pour le @WindowsDir j'y avais pas pensé.

Du coup j'ai rajouté
► Afficher le texte
Répondre