J'ai ajouté mon premier menu contextuel en utilisant le registre selon les instructions données dans cette question (ouais moi).
Je l'ai utilisé à l'origine comme la commande qu'il exécute, c'est-à-dire la valeur de la touche "commande":
Cmd /C Powershell "imageSeqView --% \"%1\""
ImageSeqView
est le nom de ma fonction powershell, je l'importe dans mon profil powershell. Cela fonctionne bien, mais je me demande: pourquoi utiliser cmd
pour ouvrir Powershell
pour exécuter la fonction? Ne serait-il pas plus simple de le faire
Powershell "imageSeqView --% \"%1\""
Cette commande semble fonctionner très bien, mais comme elle semble canonique à utiliser, cmd
je me demande si elle tue secrètement des chiots ou quelque chose?
cmd /c
...cmd /k
est assez différente en ce qu'elle laisse la fenêtre ouverte une fois la commande terminée. Vraisemblablement, le demandeur l'a fait de cette façon afin qu'ils puissent voir la sortie à des fins de débogage.cmd
tout, qui semble être omniprésent dans mes recherches.cmd /c powershell
spécifiquement? Encore une fois, celui que vous avez lié ne fait pas une telle recommandation.Réponses:
Il n'y a aucune bonne raison de le faire. En fait, le seul effet réel qui se produit est de ralentir les choses.
Les gens pourraient penser qu'il y a une bonne raison de le faire. L'utilisation de CMD a les effets suivants qui peuvent généralement être bons dans certains cas:
DIR
"Cependant, dans ce cas, aucun de ces avantages n'est obtenu. Examinons ces deux scénarios:
Ainsi, dans certains cas, il peut y avoir un moment où l'utilisation de "
CMD /C
" est utile. Par exemple, si j'utilise la commande externePSEXEC
(téléchargée depuis SysInternals) et que j'essaie d'exécuter "DIR
" sur un ordinateur distant, Windows essaiera d'exécuter laDIR
commande " ". Windows ne pourra pas exécuter cette commande car il n'existe aucun fichier "DIR.EXE
", "DIR.BAT
" ou "DIR
" se terminant par une autre extension prise en charge. (Les extensions prises en charge sont visibles en exécutant "ECHO %PATHEXT%
".)Cependant, dans ce scénario, si j'essaie d'exécuter "
CMD /C DIR
", cela fonctionnera, car Windows recherchera un exécutable nommé "CMD
", le trouvera etCMD
finira par exécuter avec succès laDIR
commande " " qui est une commande interne. partie de laCMD
commande " ".Dans ce cas, vous pouvez simplement exécuter
powershell
aussi facilement que "CMD /C powershell
", afin de ne tirer aucun avantage de l'inutile "CMD /C
". Le seul avantage que je vois à passer par l'étape supplémentaire de taper "CMD /C
" est de fournir un exemple qui sera utile si quelqu'un décide d'essayer de modifier un exemple pour exécuter une ligne de commande "DIR
" ou "COPY
". Avoir un exemple plus flexible peut être utile pour certaines personnes. Ce n'est vraiment pas nécessaire lorsque les gens savent ce qu'ils font.Quant au deuxième point que j'ai fourni, qui est de définir des variables d'environnement, c'est aussi quelque chose que vous ne faites pas activement dans ce cas particulier. Peut-être que certaines personnes pensent qu'elles aident les choses en provoquant la définition de la variable d'environnement PATH. Toutefois, lorsque vous exécutez des commandes directement (par exemple, à partir de l'option de menu "Exécuter" du menu Démarrer), le système d'exploitation Windows peut rechercher des commandes à certains endroits supplémentaires. Par exemple, dans Windows XP / plus récent, vous pouvez exécuter:
reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths"
Si la commande que vous souhaitez exécuter est répertoriée sous "Chemins d'application", Windows peut trouver le programme même s'il n'est pas dans le chemin d'accès. Ainsi, Windows est susceptible de trouver encore PLUS que ce que CMD trouverait dans le CHEMIN que CMD utilise.
Un avantage possible est que vous vouliez que CMD soit exécuté afin que vous puissiez vous référer à une variable d'environnement comme% USERPROFILE% ou% LOGONSERVER% ou% TEMP% /% TMP%, mais puisque vous ne le faites pas, vous n'êtes pas besoin d'exécuter "
CMD /C
".Donc, pour votre cas particulier: il n'y a aucune bonne raison de le faire. Les effets que vous obtenez sont de faire travailler plus votre ordinateur, de ralentir le processus et d'utiliser plus de mémoire (ce que vous faites en quantité négligeable sur un équipement moderne).
la source
cmd /c
. Quelque chose commecmd /c start /low Notepad.exe
.pbrush
c'est un chemin d'application pourmspaint
et ne fonctionnera pas dans plusieurs places).REG_EXPAND_SZ
vous pouvez étendre les variables d'environnement (en utilisant les mêmes%syntax%
) sans appeler cmd. Les verbes utilisés dans les associations de fichiers sont invoqués viaShellExecuteEx
, donc les chemins d'application s'appliquent ici.Parce qu'il se débarrasse de la coloration.
Il se peut qu'ils pensent que les gens trouvent le fond bleu distrayant.
la source
Avec
cmd powershell
, vous demandez au shell actuel, l'explorateur, d'appeler cmd avec des paramètrespowershell, "imageSeqView ..."
avec une valeur analysée de% 1 à cmd.Dans ce cas,
"powershell"
cmd est censé être une commande cmd, un exe ou l'un des scripts pris en charge par cmd, par exemple bat.Avec
powershell "imageSeqView ..."
, vous demandez au shell actuel, l'explorateur, d'appelerpowershell
avec des paramètresimageSeqView ...
avec une valeur analysée de% 1 à PowerShell.Dans ce cas, "
imageSeqView
" est prévu par powershell comme une applet de commande, un exe ou un script powershell.À condition que "
imageSeqView
" soit une fonction PowerShell, la 1ère voie est complètement inutile et diminue légèrement les performances.Pour les options de la fenêtre de commande, il existe des options similaires dans PowerShell telles que -NoExit, qui devrait être identique à / K dans cmd.
Pour le revêtement de tuyaux, l'initialisation des vars env, PowerShell peut faire de même.
la source