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

Résolu/Fermé
micromega Messages postés 131 Date d'inscription lundi 13 avril 2009 Statut Membre Dernière intervention 12 avril 2020 - Modifié le 9 avril 2018 à 19:47
micromega Messages postés 131 Date d'inscription lundi 13 avril 2009 Statut Membre Dernière intervention 12 avril 2020 - 17 avril 2018 à 10:03
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.
A voir également:

3 réponses

barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
6 avril 2018 à 23:30
Bonjour,

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

0
micromega Messages postés 131 Date d'inscription lundi 13 avril 2009 Statut Membre Dernière intervention 12 avril 2020 1
7 avril 2018 à 08:36
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
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
7 avril 2018 à 09:36
Très bien, puisque tu ne veux pas répondre aux questions je te souhaite bonne chance.
0
micromega Messages postés 131 Date d'inscription lundi 13 avril 2009 Statut Membre Dernière intervention 12 avril 2020 1
Modifié le 7 avril 2018 à 13:39
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
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
7 avril 2018 à 14:11
Est-ce que tu as essayé d'échapper les %% de ta variable ?
0
Bonjour, ça veut dire quoi "échapper les %%" de la variable ?

Merci
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
Modifié le 9 avril 2018 à 19:40
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
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
Modifié le 11 avril 2018 à 20:08
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
micromega Messages postés 131 Date d'inscription lundi 13 avril 2009 Statut Membre Dernière intervention 12 avril 2020 1
17 avril 2018 à 10:03
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