.BAT : "trop de paramètres de ligne de commande"

Résolu
micromega Messages postés 141 Statut Membre -  
micromega Messages postés 141 Statut Membre -
Bonjour,

J'essaye d'inscrire une clef dans le registre avec une variable pour le lancement d'un programme au démarrage. Voici le code :
@Echo OFF
For /F "tokens=2,*" %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Clef registre" /v Path 2^>NUL ^| findstr REG_') do (set VARIABLE="%%b") >NUL 2>&1

REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "Lancement" /t REG_SZ /d "%VARIABLE%\Lancement.exe" /f

Seulement, du fait de la VARIABLE, j'obtiens le message d'erreur "trop de paramètres de ligne de commande".

Y aurait-il un moyen de contourner le problème ?

Merci.

3 réponses

  1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
     
    Bonjour,

    On va commencer par le début, qu'obtiens-tu comme résultat dans la variable %%b ?

    0
  2. micromega Messages postés 141 Statut Membre 1
     
    Bonjour,

    La variable %%b est bonne, elle renvoi le bon chemin à utiliser.
    J'ai fait plusieurs tests et il est apparu que la variable bloque l'inscription dans le registre.
    Si je supprime la variable, la commande s'exécute parfaitement.
    0
    1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
       
      Très bien, puisque tu ne veux pas répondre aux questions je te souhaite bonne chance.
      0
    2. micromega Messages postés 141 Statut Membre 1
       
      La variable me renvoie le chemin : "C:\Program Files (x86)\Mon dossier". < c'est ça qu'il fallait répondre ?

      Le chemin est bon. Je rajoute "\Lancement.exe" à la suite de la variable afin d'inscrire cet exécutable dans le RUN du registre.

      La variable seule + extension du chemin = pas de problème (testé en ECHO en en CALL).

      Seulement, la réutilisation de la variable dans un REG ADD bloque en me donnant : "trop de paramètres de ligne de commande". < ça je ne comprend pas.

      Mes tests ont révélé que le problème vient de "%VARIABLE%". Si je la supprime et pose le chemin tel quel, cela fonctionne (pourtant la variable est bonne puisqu'elle me renvoie le même chemin).

      Si j'ai été assez clair...
      0
    3. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
       
      Est-ce que tu as essayé d'échapper les %% de ta variable ?
      0
    4. micromega
       
      Bonjour, ça veut dire quoi "échapper les %%" de la variable ?

      Merci
      0
    5. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
       
      Apparemment l'aide la commande REG ADD indique qu'il faut échapper les variables comme ceci :
      REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "Lancement" /t REG_SZ /d "^%VARIABLE^%\Lancement.exe" /f 

      Certains caractères spéciaux sont interprétés d'une certaine manière par certaines commandes, pour éviter ceci on utilise des caractères d'échappement, comme ^

      Voici la liste complète des caractères d'échappement :
      https://www.robvanderwoude.com/escapechars.php
      0
  3. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
     
    Je me suis décidé à tester sur ma machine et ça marche très bien :

    @echo off
    setlocal enableextensions disabledelayedexpansion

    For /F "tokens=2,*" %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Martin Prikryl\WinSCP 2\DragExt" /v Enable 2^>NUL ^| findstr REG_') do (set VARIABLE=%%b)

    echo ###%variable%###

    REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "Lancement" /t REG_SZ /d "%VARIABLE%\Lancement.exe" /f
    timeout /t 2

    Dans l'invite de commandes ça ne fonctionne pas comme il faut, mais dans un fichier .bat oui.

    0
    1. micromega Messages postés 141 Statut Membre 1
       
      Bonjour,

      Merci pour le test. J'ai trouvé d'où venait le problème en comparant : il fallait retirer les "" qui entoure la VARIABLE=%%b

      Ce n'était pas grand chose, mais il y avait bien un problème du côté de la variable.

      Merci de m'avoir permis de trouver le problème !
      0