cmd fonctionne mais C:\Windows\System32\cmd.exe ne pas
Je suis en train d'invoquer un exécutable en mettant la ligne suivante à l'invite de commande. (Je sais que je peux invoquer directement l'exe, mais disons simplement que je n'ai pas d'autre moyen de le faire en raison de certaines restrictions)
"cmd /C" "C:\\Program Files\ABC\xyz.exe" -register="abc"
lui-même, Il est exécuté avec succès. /C
est le paramètre de cmd.exe
. Mais quand je fais cette
"C:\Windows\System32\cmd.exe /C" "C:\\Program Files\ABC\xyz.exe" -register="abc"
Me donne l'erreur
The directory name is invalid
Aucune idée pourquoi? Et comment puis-je résoudre ce problème? J'ai utiliser le chemin d'accès complet cmd.exe.
- L'étrange, c'est que le premier format fonctionne ... je peux reproduire le comportement, mais je ne peux pas l'expliquer! Il ne fonctionne pas avec les fichiers exécutables autres que
cmd
, de sorte qu'il semble comme si elle peut être codée en dur cas particulier. 🙁
Vous devez vous connecter pour publier un commentaire.
Essayez plutôt ceci:
Par exemple:
Ces travaux sans aucun problème et les deux d'entre eux sortie de "Hello World"
"%COMSPEC%" /C "C:\Prog ..."
Comme l'a déclaré Stephan, la bonne façon de l'écrire est certaines des options suivantes
La question est
Why "cmd /c" .... works?
Il travaille pour la façon de l'analyseur est de l'interprétation de la ligne.Lorsque la ligne est lue et analysée,
"cmd /c"
est converti àDe sorte qu'il est exécuté en tant que
Cette substitution peut être facilement testée
cmd
est différent (par exemple)notepad
.notepad
recherches dans le chemin d'accès d'un fichiernotepad.xxx
, oùxxx
estbat
,cmd
ouexe
(quelque chose, c'est dans%pathext%
), tandis quecmd
n'est pas la recherche decmd.exe
mais semble être une sorte de "commande interne", qui exécute%comspec%
, peut-être comme undoskey
macro?start
commande fait la même chose. De son aideWhen you run a command that contains a the string "CMD" as the first token without an extension or path qualifier, "CMD" is replaced with the value of the COMSPEC variable. This prevents users from picking up cmd from the current directory.
cmd
à%ComSpec%
.cherche un fichier nommé
C:\Windows\System32\cmd.exe /C
.Avez-vous déjà vu un fichier avec l'extension
.exe /c
?Format Correct est:
"cmd /c"
et"cmd.exe"
œuvres,"cmd.exe /c"
ne l'est pas. Semble utiliser différents analyseurs. Nous allons attendre pour l'un de nos experts pour répondre à...Quant à la question de savoir pourquoi les guillemets supplémentaires sont nécessaires: c'est décrite dans l'aide retourné par
cmd /?
, spécifiquementDonc, si la première (non-blanc) caractère de la commande est une citation, vous avez besoin d'une paire de guillemets autour de l'ensemble de la commande.
Supplémentaires remarque: la combinaison MC ND, en réponse à la mienne, la première ligne de commande en question est interprété comme ceci: nous commençons avec
qui devient
en raison de la règle qui remplace
cmd
->%ComSpec%
combiné avec le bug/feature qui écarte les extra guillemet; celui-ci devient alorsen raison de la règle qui supprime le premier et le dernier guillemets lors du traitement de
/C
.Le système de fichiers Win32 règles de jeter la barre oblique inverse supplémentaire, de sorte que l'exécutable est lancé
et l'exécutable est sans doute ignorant le manque de close-citer dans son argument.
Étrange il me semble :/
Cela fonctionne. Je ne sais pas pourquoi. Peut-être les guillemets avant et après
"C:\\Program Files\ABC\xyz.exe" -register="abc"
sont nécessaires. Souhaitez si quelqu'un peut l'expliquer.