Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

10 réponses

1 2
Avatar
CriCri
g.bon a écrit :

@="cmd.exe /k crearep_dh.cmd %1"



Et si tu mettais
"cmd.exe /k crearep_dh.cmd" "%1"

--
bitwyse [PGP KeyID 0xA79C8F2C]
http://www.le-maquis.net
C'est comme au CNRS: des chercheurs qui cherchent on en trouve
mais des chercheurs qui trouvent on en cherche.
Avatar
Lou Ravi
g.bon wrote:
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_ROOTFoldershellcrearep_dh]
@="crearep_dh"
[HKEY_CLASSES_ROOTFoldershellcrearep_dhcommand]
@="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 ?



Sans être certain, je dirais que c'est une histoire de nombre de caractères
acceptables, ou leur forme. Essaie de mettre le nom des dossiers entre
guillemets.
Avatar
g.bon
> Et si tu mettais
"cmd.exe /k crearep_dh.cmd" "%1"



Merci, je viens d'essayer... c'est pas mieux.
Avatar
g.bon
Sans être certain, je dirais que c'est une histoire de nombre de caractères
acceptables, ou leur forme. Essaie de mettre le nom des dossiers entre
guillemets.



Ca n'est pas vraiment le nombre de caractères, si je remplace les espaces
par des x, underscores ou ce qu'on veut, ça marche.
Pour les guillements, j'en avais "l'intuition" mais j'ai essayé pas mal de
choses et pas de résultat.

Merci,
GB
Avatar
CriCri
g.bon a écrit :

Merci, je viens d'essayer... c'est pas mieux.



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 ;-)

Cdlt
CC

--
bitwyse [PGP KeyID 0xA79C8F2C]
http://www.le-maquis.net
C'est comme au CNRS: des chercheurs qui cherchent on en trouve
mais des chercheurs qui trouvent on en cherche.
Avatar
g.bon
> 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.

A+
GB
Avatar
LeLapin
g.bon a tapoté du bout de ses petites papattes :
Et si tu mettais
"cmd.exe /k crearep_dh.cmd" "%1"



Merci, je viens d'essayer... c'est pas mieux.



Tu peux pas remplacer le batch par un peu de code en n'importe quoi ?
Après tout :

Laws of Computer Programming
10. An operating system is a feeble attempt to include what was
overlooked in the design of a programming language.

(en relisant ça 30 ans plus tard, mon dieu ce que ça fait bizarre)

--
LeLapin
Avatar
g.bon
> Tu peux pas remplacer le batch par un peu de code en n'importe quoi ?
Après tout :



Je pourrais surement si je savais...
ça n'est pas mon cas.

Je ne maitrise pas de language qui me permette de faire ça, même si c'est
peut-être trivial.

GB
Avatar
LeLapin
g.bon a tapoté du bout de ses petites papattes :
Tu peux pas remplacer le batch par un peu de code en n'importe quoi ?
Après tout :



Je pourrais surement si je savais...
ça n'est pas mon cas.

Je ne maitrise pas de language qui me permette de faire ça, même si c'est
peut-être trivial.



Est-ce que ce tuto pourrait t'aider ? Attention il y a des trucs dans
le menu à gauche. En tous cas ça parle des batches pour XP et Vista.
http://commandwindows.com/batch.htm

--
LeLapin
Avatar
Pierre Maurette
g.bon, le 05/01/2010 a écrit :
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_ROOTFoldershellcrearep_dh]
@="crearep_dh"
[HKEY_CLASSES_ROOTFoldershellcrearep_dhcommand]
@="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 ?



Essayez:
@="cmd.exe /k crearep_dh.cmd `""%1"""
ou peut-être:
@=cmd.exe /k crearep_dh.cmd ""%1""

Le premier est la mise entre guillemets du second, et les " sont des
guillemets échappés parce qu'eux-mêmes entre guillemets.

--
Pierre Maurette
1 2