OVH Cloud OVH Cloud

lancement d'un batch par le menu contextuel (avec des espaces dans le chemin)

17 réponses
Avatar
g.bon
Bonjour,

J'utilise depuis longtemps des petits batchs lancés par le menu contextuel
qui créent un certain nombre de répertoire.
Ceci ne marche pas lorsque le chemin comprend un espace.

Si je le lance dans c:\windows, il me crée les dossiers dans ce répertoire,
ça fonctionne.
Si je le lance dans "c:\program files", il tente de s'executer dans
c:\program

Voici ce que j'ajoute au registre :
[HKEY_CLASSES_ROOT\Folder\shell\crearep_dh]
@="crearep_dh"
[HKEY_CLASSES_ROOT\Folder\shell\crearep_dh\command]
@="cmd.exe /k crearep_dh.cmd %1"

Le %1 que je récupère dans mon batch est le début du chemin, tronqué au
premier espace.

Savez-vous comment remédier à cela ?

Merci,
GB

7 réponses

1 2
Avatar
Sergio
g.bon a écrit :
On peut prendre connaissance du contenu de ton "crearep_dh.cmd"?

Si ce n'est pas top-secret il serait plus facile de l'essayer que de
deviner ;-)



Bien-sûr, ca n'a rien de secret mais j'ai peur que ça ne soit pas très
utile.

J'ai mis en première ligne "echo %1" et dès ce moment la ligne affichée
n'est pas complète (arrêt au premier espace).
Le reste du script n'a rien de spécial et il marche sans espace dans le
chemin :

echo %1
call recup_date_heure.cmd
md %1%annee%%mois%%jour%_%heure%%min%_
exit

dans cet exemple, je crée un dossier dont le nom est l'année le mois, le
jours, l'heure et les minutes.



Je ferais plutôt :
echo %1 (facultatif !)
call recup_date_heure.cmd
cd /d %1
md %annee%%mois%%jour%_%heure%%min%_


--
Serge http://leserged.online.fr/
Mon blog: http://cahierdesergio.free.fr/
Soutenez le libre: http://www.framasoft.org
Avatar
Jean-Claude BELLAMY
"g.bon" a écrit dans le message de groupe de
discussion : 4b43db29$0$32355$
On peut prendre connaissance du contenu de ton "crearep_dh.cmd"?

Si ce n'est pas top-secret il serait plus facile de l'essayer que de
deviner ;-)



Bien-sûr, ca n'a rien de secret mais j'ai peur que ça ne soit pas très
utile.

J'ai mis en première ligne "echo %1" et dès ce moment la ligne affichée
n'est pas complète (arrêt au premier espace).
Le reste du script n'a rien de spécial et il marche sans espace dans le
chemin :

echo %1
call recup_date_heure.cmd
md %1%annee%%mois%%jour%_%heure%%min%_
exit



C'est NORMAL que ça ne fonctionne pas !
Tu sembles avoir oublié que l'ESPACE est le caractère SÉPARATEUR des
arguments passés à un batch (ou tout autre exécutable d'ailleurs : EXE, VBS,
...)!


Il est tout à fait NORMAL que dans le paramètre formel %1 tu ne récupères
que le premier "paquet" de caractères non séparés par un espace.

Si tu veux récupérer TOUS les morceaux, il suffit d'utiliser le paramètre
formel %* au lieu de %1 !
ET BIEN SÛR, il faut encadrer la chaine par des GUILLEMETS !

echo %*
...
md "%*%annee%%mois%%jour%_%heure%%min%_"




--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP]
http://www.bellamyjc.org ou http://jc.bellamy.free.fr
Avatar
g.bon
merci, je viens d'essayer, mais non...
Avatar
g.bon
> Je ferais plutôt :
echo %1 (facultatif !)
call recup_date_heure.cmd
cd /d %1
md %annee%%mois%%jour%_%heure%%min%_



merci mais ça ne changera rien.

La ligne echo %1 produit un chemin qui est déjà tronqué.
Donc, tout ce qui pourra être mis après ne résoudra rien.
La totalité de la ligne n'est pas passée.
Avatar
g.bon
> Il est tout à fait NORMAL que dans le paramètre formel %1 tu ne récupères
que le premier "paquet" de caractères non séparés par un espace.
Si tu veux récupérer TOUS les morceaux, il suffit d'utiliser le paramètre
formel %* au lieu de %1 !
ET BIEN SÛR, il faut encadrer la chaine par des GUILLEMETS !
echo %*
md "%*%annee%%mois%%jour%_%heure%%min%_"



Parfait, merci beaucoup.
Impeccable.
Avatar
Emmanuel
> Si je le lance dans "c:program files", il tente de s'executer dans
c:program



C'est pour ça que moi j'écris c:progra~1 et pas c:program files

--
Emmanuel
'97 French Blue Tiger
'98 KLX300R
http://tigerfr.free.fr
Avatar
Jean-Claude BELLAMY
"Emmanuel" a écrit dans le message de groupe de discussion
: hi2s5u$s38$
Si je le lance dans "c:program files", il tente de s'executer dans
c:program



C'est pour ça que moi j'écris c:progra~1 et pas c:program files



Sauf que c'est une TRÈS MAUVAISE MÉTHODE !

En effet, la plupart du temps, le nom court de "C:program files" est
"C:progra~1", MAIS PAS TOUJOURS !!!
Il suffit qu'il y ait eu un autre dossier dont le nom se rapproche de
"program files" (p.ex. "C: programmes") pour que la construction du nom
court de "c:program files" soit modifiée !


Il FAUT donc :

- soit utiliser un outil donnant les noms courts EXACTS
P.ex. mon script "nomcourt.vbs"
http://www.bellamyjc.org/fr/vbsdownload.html#nomcourt

- soit, tout bêtement, encadrer les noms longs avec
des guillemets : "C:program files"



--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP]
http://www.bellamyjc.org ou http://jc.bellamy.free.fr
1 2