Page 1 sur 1

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

Posté : mar. 01 déc. 2015 19:26
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.

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

Posté : mar. 01 déc. 2015 21:26
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

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

Posté : mer. 02 déc. 2015 12:33
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.

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

Posté : mer. 02 déc. 2015 13:27
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)

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

Posté : mer. 02 déc. 2015 20:20
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
 

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

Posté : mer. 02 déc. 2015 21:39
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)

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

Posté : jeu. 03 déc. 2015 13:28
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
 

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

Posté : jeu. 03 déc. 2015 14:55
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

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

Posté : jeu. 03 déc. 2015 22:32
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... :|

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

Posté : ven. 04 déc. 2015 18:49
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