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

Résolu
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. Bonjour,

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

    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.
      1. Très bien, puisque tu ne veux pas répondre aux questions je te souhaite bonne chance.
      2. 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...
      3. Est-ce que tu as essayé d'échapper les %% de ta variable ?
      4. Bonjour, ça veut dire quoi "échapper les %%" de la variable ?

        Merci
      5. 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
    2. 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.

      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 !