[C] Convertir mon batch en autoit

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Avatar du membre
labougie
Niveau 4
Niveau 4
Messages : 68
Enregistré le : dim. 03 nov. 2013 14:36
Status : Hors ligne

Re: [..] Convertir mon batch en autoit

#61

Message par labougie »

Bien le bonsoir,

Ok pour les infos sur le fait de structurer avant d'enjoliver.

je cherche a prendre différentes infos sur les fichiers sorties dans le logfile.
Telles que poids attributs création.
j'ai trouvé les commandes permettant ces recherches mais hélas, le fait d'inclure ce petit monde dans un boucle me sort par les yeux.

$size = fileGetSize(file.ext)

$create = FileGetTime(file.ext,1)

$sAttribute = FileGetAttrib(file.ext)

comment puis je indiquer le nom du fichier dans les paramètres sachant que celui-ci change à chaque tour?

le retour pour $size me donne 0 => introuvable
pour $create => rien
et pour l'attribut => c'est assez vague comme résultat.

j'ai parcouru de nombreuses lectures, mais hélas, chaque fois, un nom était dans les paramètres ce qui n'est pas le cas pour moi, car il change à chaque tour.

labougie
Avatar du membre
labougie
Niveau 4
Niveau 4
Messages : 68
Enregistré le : dim. 03 nov. 2013 14:36
Status : Hors ligne

Re: [..] Convertir mon batch en autoit

#62

Message par labougie »

Voici le résultat que j'obtiens
► Afficher le texte
les soucis sont sur la taille date&heure puis l'attribut, qui ne changent pas à chaque tour.

je ne comprends pas comment imbriquer tout cela afin d'obtenir le bon résultat
► Afficher le texte
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Convertir mon batch en autoit

#63

Message par mikell »

labougie a écrit :hélas, le fait d'inclure ce petit monde dans un boucle me sort par les yeux.
Très ennuyeux quand on code, voire rédhibitoire. Peut-être essayer l'agriculture ?

Blague à part, si le nom de fichier change à chaque tour c'est qu'il varie... il est variable quoi... ça te rappelle rien ?
► Afficher le texte
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
labougie
Niveau 4
Niveau 4
Messages : 68
Enregistré le : dim. 03 nov. 2013 14:36
Status : Hors ligne

Re: [..] Convertir mon batch en autoit

#64

Message par labougie »

Mikell,

Le code c'est mieux que l'agriculture, car il se pratique au chaud :mrgreen: .

---

Effectivement, avec une variable c'est mieux. Merci.
Pourtant il me semblait avoir tenté avec, j'ai du zappé "kek" chose.

---

Sur mon script initiale, tu me fais la remarque de d'abord créer le moteur de recherche, OK.
Il fonctionne parfaitement bien, et j'ai trouvé l'erreur qui empêche de scanner après le 1er lecteur ne possédant pas le fichier recherché.

l'erreur est: la variable n'est pas une valeur du tableau,
donc n'ayant pas fichier sur le lecteur I:\ le tableau ne se rempli pas, mais normalement Aarray[0] devrait sortir comme valeur 0, et là c'est loupé.

entête du logfile

ToolSearch by © Labougie

Outil lancé par: Labougie Depuis: [C:\Users\Labougie\Desktop\Script AutoIt] le: 09-12-2013 à: 11:01:49
Système d'exploitation: Windows 8 Pro with Media Center -
HardWare: Cpu X64 - Système X86

=~=~=~=~=~=~=~=~=~=~=~=~ Recherche pour les Fichiers " labougie " =~=~=~=~=~=~=~=~=~=~=~=~

Recherche pour le lecteur c:\

listing des fichiers par exemple 19 lignes

=~=~=~=~=~=~=~=~ Fin de la recherche ==> 19 fichier(s) trouvé(s) sur c: =~=~=~=~=~=~=~=~

dito pour defg

le 1er lecteur ne rentrant pas en compte est H:\

ensuite j'ai la somme intermèdiaire de la recherche, c'est cette somme intermédiaire qui coince.
j'ai tenté un compteur pour obtenir la bonne valeur, mais hélas, il compte les tours, et j'ai beau le déplacer, rien n'y fait

=~=~=~=~=~=~=~=~ Fin de la recherche ==> " & $recherche[0] & " fichier(s) trouvé(s) " & " sur " & $k &" =~=~=~=~=~=~=~=~")

-----------

pour $recherche[0] que cela soit avec 0 ou $j issue de la boucle, cela bloque tout le temps,
(117) : ==> Subscript used with non-Array variable.:
FileWriteLine($LogFile,"=~=~=~=~=~=~=~=~ Fin de la recherche ==> " & $recherche^ ERROR

Script, la mauvaise ligne est la 55
► Afficher le texte
labougie
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Convertir mon batch en autoit

#65

Message par mikell »

labougie a écrit : n'ayant pas fichier sur le lecteur I:\ le tableau ne se rempli pas, mais normalement Aarray[0] devrait sortir comme valeur 0,
Non
Si aucun fichier trouvé _FileListToArrayEx ne retourne pas un tableau mais une valeur vide "" avec @error=4 (No File(s) Found)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
labougie
Niveau 4
Niveau 4
Messages : 68
Enregistré le : dim. 03 nov. 2013 14:36
Status : Hors ligne

Re: [..] Convertir mon batch en autoit

#66

Message par labougie »

Bonjour,

J'ai pris en compte l'erreur 4, cela fonctionne bien mieux.

Je suis maintenant sur la partie choix du lecteur.
En fonction du script de Thierry, j'ai rapporté un erreur sur laquelle je travaille.

ce script
► Afficher le texte
Me rapporte ce log
► Afficher le texte
Peut on inscrire ce rapport dans un tableau à plusieurs dimensions?

J'ai balbutier un script qui bien évidemment ne fonctionne pas mais je pense être sur une piste.
Sans compter sur les erreurs de syntaxes.

► Afficher le texte
Ensuite, il faut exploiter le résultat obtenu pour pouvoir faire un scan sur les lecteurs affichés "ready", afin de palier l'erreur que je rencontre.
Chaque Os windows devrait ainsi être pris en compte.

labougie
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Convertir mon batch en autoit

#67

Message par Tlem »

Bonsoir. Voici une adaptation assez complète de votre code.
L'utilisation d'un tableau multidimensionnel n'est pas indispensable comme vous pourrez le constater.
► Afficher le texte
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é".
Avatar du membre
labougie
Niveau 4
Niveau 4
Messages : 68
Enregistré le : dim. 03 nov. 2013 14:36
Status : Hors ligne

Re: [..] Convertir mon batch en autoit

#68

Message par labougie »

Bonjour Thierry,

Merci pour ton code.
Effectivement tu as tout regroupé dans une seule colonne.
mais hélas, je n'arrive pas a exploiter le résultat afin de pouvoir lancer une recherche en fonction des lecteurs trouvés.

J'obtiens bien ceci
► Afficher le texte
mais ensuite, la recherche lance obligatoirement tous les lecteurs.
aussi si je demande le status des lecteurs il ressort ceci
► Afficher le texte
j'avoue ne pas être très doué, du coup cela me mine l'esprit.

-----

ne peut on pas passer par quelque chose ressemblant à ceci
For %%k in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist %%k:

désolé si j'accappare votre temps, mais je suis Perdu :mrgreen:

labougie
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Convertir mon batch en autoit

#69

Message par Tlem »

Vous aimez vous compliquer la vie ... :roll:
► Afficher le texte
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é".
Avatar du membre
labougie
Niveau 4
Niveau 4
Messages : 68
Enregistré le : dim. 03 nov. 2013 14:36
Status : Hors ligne

Re: [..] Convertir mon batch en autoit

#70

Message par labougie »

Bonjour Thierry,

Mais non suis pas compliqué :mrgreen:

Je vais laissé de coté pour le WE cette affaire de lecteur qui me sort par les yeux :lol: .

J'ai composé ce script, je pense avoir traité de nombreux cas de figure.
Certes, je crois que vous allez trouver des coquilles.
Alors me les montrer, merci par avance.
► Afficher le texte
Logfile de sortie "Fichiers"
► Afficher le texte
Logfile de sortie "Dossier"
► Afficher le texte
labougie
Avatar du membre
labougie
Niveau 4
Niveau 4
Messages : 68
Enregistré le : dim. 03 nov. 2013 14:36
Status : Hors ligne

Re: [..] Convertir mon batch en autoit

#71

Message par labougie »

Bonsoir,

Je mis sous le GUI, :mrgreen: , une partie de mon outil.
Je vais regarder les Fonctions indiqués par Thierry en début de conversation afin d'alléger toutes les lignes de textes.

Questions:
  1. Existe t'il une fonction/commande permettant de centrer les labels, ou autres?
  2. Sans regarder sur la façon dont j'ai codé ce script, ai-je bien procédé. Les commandes de travail Case $btn31 & Case $btn41 sont elles judicieusement placées.
  3. Comment indiquer à "Exécuter" d'être validé par "Entrée", je ne comprends pas le fonctionnement de Hotkeyset et surtout comment l'intégrer.
► Afficher le texte

Mon script en GUI
► Afficher le texte
Labougie
Modifié en dernier par Tlem le dim. 15 déc. 2013 21:47, modifié 1 fois.
Raison : Ajout des balises de code dans tous les messages.
Avatar du membre
labougie
Niveau 4
Niveau 4
Messages : 68
Enregistré le : dim. 03 nov. 2013 14:36
Status : Hors ligne

Re: [..] Convertir mon batch en autoit

#72

Message par labougie »

Bonsoir,

Je ne trouve pas comment incrémenter un nom de fichier ni le nombre de Run
Explications:

Run 1 => nom de fichier [1]
Run 2 => nom de fichier [2]
etc...

windows me rapporte cette erreur
► Afficher le texte
Script
► Afficher le texte
Je ne comprends pas comment réaliser le script.
Au 1er Run le fichier n'existe pas donc il porte le nom de logfile1 lors du lancement d'un script. Je sais le nommer logfile mais pas logfile1.

j'ai fais des essais non conservés avec filewrite aussi, mais rien n'y fait.

merci de m'aiguiller.

Labougie
Modifié en dernier par labougie le jeu. 19 déc. 2013 22:52, modifié 1 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Convertir mon batch en autoit

#73

Message par Tlem »

Bonsoir.

Code : Tout sélectionner

Global $Count = 5
Global $Logfile = @HomeDrive & "\logfiletest.txt"

If FileExists($Logfile) Then ShellExecute($Logfile)

For $i = 1 To $Count
    $Logfile = @HomeDrive & "\logfiletest" & $Count & ".txt"
    If FileExists($Logfile) Then
        ShellExecute($Logfile)
    EndIf
Next
PS : Merci de rajouter la balise de code dans vos messages précédents.
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é".
Avatar du membre
labougie
Niveau 4
Niveau 4
Messages : 68
Enregistré le : dim. 03 nov. 2013 14:36
Status : Hors ligne

Re: [..] Convertir mon batch en autoit

#74

Message par labougie »

Bonsoir Tlem,

Merci pour la réponse, je regarder le code avec attention afin de pouvoir l'exploiter au mieux.

Je ne comprends pas cette phrase
Tlem a écrit :PS : Merci de rajouter la balise de code dans vos messages précédents.
J'ai pourtant utilisé la balise Spoiler pour masquer le script ainsi que la capture.

labougie

Edit:

J'ai compris, il faut en plus du spoiler utiliser dedans la balise code.
[ spoiler ]
[ code ]
texte
[ / code ]
[ / spoiler ]

je vais tâcher d'y être plus attentif
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Convertir mon batch en autoit

#75

Message par Tlem »

labougie a écrit :il faut en plus du spoiler utiliser dedans la balise code.
Tout a fait. Le thème actuel laisse apparaitre la totalité du code si la balise spoiler n'est pas utilisée, mais cela va changer.

Je préfère que vous utilisiez systématiquement la balise de code tout en sachant que si vous rajoutez la balise spoiler pour un code qui est long, c'est bien, mais pas grave si vous l'oubliez. ^^
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é".
Avatar du membre
labougie
Niveau 4
Niveau 4
Messages : 68
Enregistré le : dim. 03 nov. 2013 14:36
Status : Hors ligne

Re: [..] Convertir mon batch en autoit

#76

Message par labougie »

Bonjour,

J'ai fais des modifications suivants nos échanges et je remplis mon gui doucement avec les commandes.

Dans le script suivant, seulement le groupe Fichier est opérationnel.
► Afficher le texte
Le dossier toolsearch est crée sous C:\ avec des sous dossiers en fonction du Groupe.
Donc dans c:\toolsearch\dossier\ sont rangés ici les fichiers résultant du script.
Chaque fichier porte le nom de la recherche lancée.
Les noms sont incrémentés de +1 à chaque lancement sur une recherche identique

Exemples:
Dans l'ordre dans lequel ils apparaîssent
c-frst[1].txt
c-frst[2].txt
c-frst[3].txt
c-frst[4].txt
c-frst.txt
Recherche dossiers.txt

Une erreur est générée sur le nombre 4 dés le premier lancement. Et je ne vois pas ou le script prends ce nombre 4.

Le fichier "Recherche Dossier" est crée normalement si une mauvaise saisie est effectuée, gui vide ou erreur de path. Mais là il apparaît en 6ième position pour la recherche c:\frst\

(Pour info, Frst est un outil de désinfection dév par Farbar.)

Merci de vous pencher sur le pourquoi du nombre 4 qui me poisse la life
entre les lignes 311 et 334.
Le script est commenté pour chaque étapes, il claire donc très lisible, enfin pour moi.
Avant de vous solliciter j'ai procédé à plusieurs test, auparavant le nombre du blocage était 5, et, l'incrémentation ne tournait pas dans le bon sens.

La seule solution a été de mettre -1 dans la boucle pour que cela roule.

labougie

Labougie
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Convertir mon batch en autoit

#77

Message par Tlem »

Bonjour.
Vous nous parlez d'un problème concernant les lignes de codes de 311 à 334, soir en récupérant ce qui est essentiel, l'extrait de code ci-dessous :

Code : Tout sélectionner

; Numérotation des fichiers si il est déja existant
local $run = 1
For $i = -1 to $run
    if not FileExists(@HomeDrive & "\ToolSearch\Dossier\" & $path & "[" & $run & "]" & ".txt") Then

        ;$run = $run + 1
        FileMove(@HomeDrive & "\ToolSearch\Dossier\" & $path & ".txt", @HomeDrive & "\ToolSearch\Dossier\" & $path & "[1]" & ".txt")

        $LogFile = (@HomeDrive & "\ToolSearch\Dossier\" & $path & "[" & $run & "]" & ".txt")

    EndIf
    if FileExists($LogFile) then
        $run = $run + 1
        FileMove(@HomeDrive & "\ToolSearch\Dossier\" & $path & ".txt", @HomeDrive & "\ToolSearch\Dossier\" & $path & "[" & $run & "]" & ".txt")
        $LogFile = (@HomeDrive & "\ToolSearch\Dossier\" & $path & "[" & $run & "]" & ".txt")

    EndIf
next
Sans entrer dans les détails de celui-ci, deux chose me choques :
1 - Vous utilisez une boucle For/Next avec la variable $i, mais sans que cette dernière ne soit utilisée !!! Quel est donc l’intérêt d'une boucle sur une variable si ce n'est pas pour l'utiliser !!!

2 - La ligne juste après la boucle, test si le fichier "@HomeDrive & "\ToolSearch\Dossier\" & $path & "[" & $run & "]" & ".txt"" est inexistant. Or la ligne suivante, vous essayez de déplacer le fichier alors qu'il est inexistant.

3 - La ligne "$LogFile = (@HomeDrive ..." étant identique dans les deux tests If, elle devrait être unique et à la fin du dernier EndIf.

4 - La ligne "FileMove(..." étant 'presque identique', vous devriez mettre en forme l'élément dynamique dans les conditions If et la mettre avec celle ci-dessus. ;)

Voilà. Il est assez difficile de ce mettre à votre place et d’appréhender le code comme vous. Mais une certaine logique est de mise. Ce qui n'est pas le cas dans le bout de code ci-dessus. Essayez de synthétiser vos demandes et de simplifier vos codes.
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é".
Avatar du membre
labougie
Niveau 4
Niveau 4
Messages : 68
Enregistré le : dim. 03 nov. 2013 14:36
Status : Hors ligne

Re: [..] Convertir mon batch en autoit

#78

Message par labougie »

Bonsoir Tlem,

Je me doute bien qu'il vous est difficile de vous mettre dans tous les scripts pour lesquels vous contribuez :wink: .

N'ayant aucune formation de programmation, je fais du mieux que peux pour m'expliquer :mrgreen: .

Je tente donc de simplifier le script mais ce n'est pas toujours chose facile, et la logique n'est pas universelle :lol: .

Local $LogFile = (@HomeDrive & "\ToolSearch\Dossier\Recherche Dossier.txt")
$path = GUICtrlRead($path41)

Le path est modifié pour sortir de cette façon
C\ToolSearch\Dossier\c-frst[1].txt
Dans le script ci-dessous, le comptage se réalise fort bien.
Mais il y a 2 Mais

► Afficher le texte
Mais n°1
une erreur de ce type dés le 1er Run
► Afficher le texte
Pourtant le principe de For $i = 1 to 100 est
de faire un comptage jusqu'à 100 est ensuite stop, n'est-ce pas!

Mais n°2
Le logfile ne s'affiche pas, due sans doute au mais n°1

labougie
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Convertir mon batch en autoit

#79

Message par Tlem »

Bonsoir.
Alors dans le code que vous présentez, pour un regard extérieur, il nous manque le Path d'origine. Ceci dit avec votre message d'erreur on arrive à deviner, mais bon, ce n'est pas des plus simple !!!

Bref, voici ce que fait votre code :
- Au premier tour de boucle, il déplace et renomme le fichier "C:\ToolSearch\Dossier\Recherche Dossier.txt" en "C:\ToolSearch\Dossier\c-frst[1].txt".

- Au second tour de boucle, il essaie redéplacer et de renommer le fichier "C:\ToolSearch\Dossier\Recherche Dossier.txt" en "C:\ToolSearch\Dossier\c-frst[2].txt", or celui-ci n'existe plus puisqu'il à déjà été déplacé, donc il ne se passe rien !

- Pour les tours suivant, c'est la même chose que ci-dessus, jusqu'à ce que la boucle soit finie.

Comme la boucle est finie, la variable $LogFile est égal à (@HomeDrive & "\ToolSearch\Dossier\" & $path & "[" & $run & "]" & ".txt") soit "C:\ToolSearch\Dossier\c-frst[100].txt", mais comme ce fichier n'exista pas, ShellExecute($LogFile) = ERREUR ^^
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é".
Avatar du membre
labougie
Niveau 4
Niveau 4
Messages : 68
Enregistré le : dim. 03 nov. 2013 14:36
Status : Hors ligne

Re: [..] Convertir mon batch en autoit

#80

Message par labougie »

Merci pour tes lectures en ces veilles de Noël. 8) .
il nous manque le Path d'origine
Local $LogFile = (@HomeDrive & "\ToolSearch\Dossier\Recherche Dossier.txt")
$path = GUICtrlRead($path41)

Le path est modifié pour sortir de cette façon
C\ToolSearch\Dossier\c-frst[1].txt
dans cet exemple le path inscrit par l'user est c:\frst\
afin de lister ce dossier

----

Je comprends votre explication sur le comptage de
- Au second tour de boucle, il essaie redéplacer et de renommer le fichier "C:\ToolSearch\Dossier\Recherche Dossier.txt" en "C:\ToolSearch\Dossier\c-frst[2].txt", or celui-ci n'existe plus puisqu'il à déjà été déplacé, donc il ne se passe rien !
Mais pas pour ceci
Comme la boucle est finie, la variable $LogFile est égal à (@HomeDrive & "\ToolSearch\Dossier\" & $path & "[" & $run & "]" & ".txt") soit "C:\ToolSearch\Dossier\c-frst[100].txt", mais comme ce fichier n'exista pas, ShellExecute($LogFile) = ERREUR ^^
Que néni, dés le 1er run cette erreur est présente, or le logfile[1] est bon.
J'ai lancé 7 runs, les logfile sont très bien numérotés, et dans l'ordre croissant.
Pourquoi windows donne cette erreur de
"C:\ToolSearch\Dossier\c-frst[100].txt"
bien que le nombre total de run sur la même demande de recherche ne soit pas atteint.
Je viens de remplacer 100 par 10000, même résultat,
"C:\ToolSearch\Dossier\c-frst[10000].txt" est introuvable.
Et je n'ai pas lancé 10000 fois la même recherche :mrgreen: .

labougie
Verrouillé