IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Optimisation extraction variables [Batch]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 165
    Par défaut Optimisation extraction variables
    Salut,

    j'utilise un petit batch qui extrait des valeurs du registre et les affecte à des variables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Desktop" > path.txt
    FINDSTR "Desktop" path.txt > path2.txt
    FOR /F "tokens=3 delims=	" %%a IN (path2.txt) DO (SET Bureau=%%a
    )
    REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal" > path.txt
    FINDSTR "Personal" path.txt > path2.txt
    FOR /F "tokens=3 delims=	" %%a IN (path2.txt) DO (SET Documents=%%a
    )
    REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Programs" > path.txt
    FINDSTR "Programs" path.txt > path2.txt
    FOR /F "tokens=3 delims=	" %%a IN (path2.txt) DO (SET MenuDemarrerPrograms=%%a
    )
    [...]
    ça marche très très bien mais je trouve la forme très moyenne, et je cherche à l'optimiser en imbriquant deux boucles, l'une qui teste les valeurs, l'autre qui teste les variables. C'est à bout de force que j'en suis arrivé à cette usine à gaz qui n'a rien de comparable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    FOR %%I IN (
    	        "Desktop"
    	        "Personal"
    	        "Programs"
    	        "Startup"
    	        "Start Menu"
    	        "Favorites"
    	        "Local AppData"
    ) DO FOR /F "tokens=3 delims=	" %%G IN ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v %%I') DO (
    ECHO %%G > Path.txt
    FOR /F "tokens=*" %%C IN (Path.txt) DO FOR %%A IN (
    Bureau
    Documents
    MenuDemarrerPrograms
    Demarrage
    MenuDemarrer
    Favoris
    LocalAppData
    ) DO SET %%A=%%G
    )
    pause
    le résultat a au moins le mérite d'être comique, toutefois ce code me permet de vous préciser quel type d'orientation je recherche.

    Est-ce que vous auriez une suggestion qui soit à peu près dans cet esprit ?

    Merci

  2. #2
    Membre émérite
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Par défaut
    Salut,

    Tu ne préférais pas plutôt un script auquel tu donnerais par exemple un paramètre comme «Desktop» et qui te donnerait en sortie le chemin du bureau?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 165
    Par défaut
    Salut, et merci

    en fait je voulais surtout savoir si c'était possible d'imbriquer deux ou trois boucles comme tenté ci-dessus, où à l'aide d'une sorte de tableau dans le genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    FOR %%I IN (
    	        "Desktop"	Bureau
    	        "Personal"	Documents
    	        "Programs"	MenuDemarrerPrograms
    	        "Startup"	Demarrage
    	        "Start Menu"	MenuDemarrer
    	        "Favorites"	Favoris
    	        "Local AppData"	LocalAppData
    ) DO
    le problème étant qu'en fait il faudrait que l'affectation soit faite sur la variable correspondante, alors que dans mon script toutes les combinaisons se succèdent.

    Tu pensais à quoi ?

  4. #4
    Membre émérite
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Par défaut
    Citation Envoyé par eZula Voir le message
    Tu pensais à quoi ?
    À de la flexibilité, quelque chose du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    findpath /desktop
    affichage: x:\chemin\utilisateur\bureau
    (pour rappel, dans une configuration par défaut le bureau se trouve dans %userprofile%\bureau)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    findpath /StartMenu
    affichage: x:\chemin\utilisateur\Menu Démarrer
    Tu l'auras compris, l'avantage est de pouvoir réutilisé findpath dans n'importe quel script.
    (findpath étant à faire bien entendu)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for /f "tokens=*" %%i in ('findpath /StartMenu') do set menudemarrer=%%i
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for /f "tokens=*" %%i in ('findpath /Startup') do copy /b link.lnk %%i\link.lnk

    Pour ton problème de correspondance, voici un exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for %%p in (
    "Desktop=Bureau"
    "Personal=Documents"
    "Programs=MenuDemarrerPrograms"
    ) do (
    for /f "tokens=1,* delims==" %%i in ('echo %%~p') do echo %%i [%%j])
    enjoy;

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 165
    Par défaut
    Salut,

    je me suis inspiré de ton dernier code pour en arriver à qquechose de plus satisfaisant qu'au départ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    if exist Path.txt del Path.txt
    
    FOR %%p IN (
    	    "Desktop=Bureau"
    	    "Personal=Documents"
    	    "Programs=MenuDemarrerPrograms"
    	    "Startup=Demarrage"
    	    "Start Menu=MenuDemarrer"
    	    "Favorites=Favoris"
    	    "Local AppData=LocalAppData"
    	   ) DO (FOR /F "tokens=1,* delims==" %%i IN ('echo %%~p') DO (
    FOR /F "tokens=3 delims=	" %%G IN ('SWREG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v %%i') DO (
    SET %%j=%%G)
    )
    )
    (
    ECHO Variables %Username%
    ECHO.
    ECHO Bureau : %Bureau%
    ECHO Documents : %Documents%
    ECHO MenuDemarrerPrograms : %MenuDemarrerPrograms%
    ECHO Demarrage : %Demarrage%
    ECHO MenuDemarrer : %MenuDemarrer%
    ECHO Favoris : %Favoris%
    ECHO LocalAppData : %LocalAppData%
    )>> Path.txt
    Notepad Path.txt
    
    PAUSE
    Donc merci bp pour cette suggestion.

    Cependant il y a un souci avec les noms %%j contenant des espaces, à savoir Start Menu et Local AppData
    J'ai tenté de jouer sur les ~ dans les différentes boucles, rien à faire, il affiche bien toutes les variables dans Path.txt à l'exception de %MenuDemarrer% et %LocalAppData%

    je sens que c'est pas loin, mais il me manque encore des réflexes avec la syntaxe optionnelle

  6. #6
    Membre émérite
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Par défaut
    Citation Envoyé par eZula Voir le message
    Cependant il y a un souci avec les noms %%j contenant des espaces, à savoir Start Menu et Local AppData
    Pour que ta valeur, surtout si elle est composée d'un ou plusieurs espaces, soit considérée comme une seule entité (de surcroit un seul paramètre /v à la commande «reg») il faut la mettre entre guillemets.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
    ... for ... reg query ... \CurrentVersion\Explorer\Shell Folders" /v "%%i" '
    ...
    Citation Envoyé par eZula Voir le message
    je sens que c'est pas loin
    Moi je sens que c'est tout près.

    Bonne continuation.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CKEditor] optimisation liste variables ckeditor
    Par unix_2009 dans le forum Bibliothèques & Frameworks
    Réponses: 0
    Dernier message: 23/10/2012, 16h16
  2. Extraction variables base de données
    Par olfa_bl dans le forum Android
    Réponses: 0
    Dernier message: 24/04/2012, 13h22
  3. Réponses: 5
    Dernier message: 11/08/2011, 09h08
  4. Optimisation avec Variables Abstraites
    Par medchok dans le forum MATLAB
    Réponses: 2
    Dernier message: 01/12/2008, 22h08
  5. Probleme d'optimisation à plusieurs variables
    Par arabimouh dans le forum MATLAB
    Réponses: 3
    Dernier message: 30/01/2008, 14h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo