Ich habe mein erstes Kontextmenü mithilfe der Registrierung gemäß den Anweisungen in dieser Frage hinzugefügt (yay me).
Ich habe dies ursprünglich als den Befehl verwendet, den es ausführt, dh den Wert der "Befehl" -Taste:
Cmd /C Powershell "imageSeqView --% \"%1\""
ImageSeqView
ist der Name meiner Powershell-Funktion, die ich in mein Powershell-Profil importiere. Es funktioniert gut, aber ich frage mich: Warum cmd
zum Öffnen verwenden Powershell
, um die Funktion auszuführen? Wäre es nicht einfacher, es einfach zu machen?
Powershell "imageSeqView --% \"%1\""
Dieses Kommando scheint gut zu funktionieren, aber da es kanonisch erscheint, cmd
frage ich mich, ob es heimlich Welpen tötet oder so?
cmd /c
...cmd /k
unterscheidet sich dahingehend, dass das Fenster nach Abschluss des Befehls geöffnet bleibt . Vermutlich hat der Fragesteller das so gemacht, damit er die Ausgabe zu Debug-Zwecken sehen konnte.cmd
, die aus meiner Forschung allgegenwärtig zu sein scheint.cmd /c powershell
speziell empfohlen wird ? Auch hier macht derjenige, den Sie verlinkt haben, keine solche Empfehlung.Antworten:
Es gibt keinen guten Grund dafür. Tatsächlich ist der einzige wirkliche Effekt, der eintritt, die Verlangsamung.
Die Leute denken vielleicht, dass es einen guten Grund gibt, dies zu tun. Die Verwendung von CMD hat die folgenden Auswirkungen, die in einigen Fällen häufig hilfreich sein können:
DIR
"In diesem Fall wird jedoch keiner dieser Vorteile erzielt. Schauen wir uns diese beiden Szenarien an:
Daher kann es in einigen Fällen eine Zeit geben, in der die Verwendung von "
CMD /C
" nützlich ist. Wenn ich beispielsweise den externen Befehl verwendePSEXEC
(von SysInternals heruntergeladen) und versuche, "DIR
" auf einem Remotecomputer auszuführen , wird Windows versuchen, denDIR
Befehl " " auszuführen . Windows kann diesen Befehl nicht ausführen, da keine "DIR.EXE
", "DIR.BAT
" oder "DIR
" Datei vorhanden ist, die mit einer anderen unterstützten Erweiterung endet. (Unterstützte Erweiterungen können durch Ausführen von "ECHO %PATHEXT%
" angezeigt werden .)Wenn ich in diesem Szenario jedoch versuche, "
CMD /C DIR
" auszuführen , funktioniert dies, da Windows nach einer ausführbaren Datei mit dem Namen "CMD
" sucht und diese findet und anschließendCMD
denDIR
internen Befehl erfolgreich ausführt Teil desCMD
Befehls " ".In diesem Fall können Sie genauso
powershell
einfach wie "CMD /C powershell
" ausführen , sodass Sie keinen Nutzen aus dem unnötigen "CMD /C
" ziehen. Der einzige Vorteil, den ich sehe, wenn ich den zusätzlichen Schritt der Eingabe von "CMD /C
" durchführe, ist die Angabe eines Beispiels, das nützlich ist, wenn jemand versucht, ein Beispiel zu ändern, um eine Befehlszeile "DIR
" oder "COPY
" auszuführen . Ein flexibleres Beispiel zu haben, kann für manche Menschen nützlich sein. Es ist wirklich nicht nötig, wenn die Leute wissen, was sie tun.Was den zweiten Punkt betrifft, den ich angegeben habe, nämlich das Festlegen von Umgebungsvariablen, so tun Sie dies auch in diesem speziellen Fall nicht aktiv. Vielleicht denken einige Leute, dass sie helfen, indem sie dafür sorgen, dass die Umgebungsvariable PATH gesetzt wird. Wenn Sie jedoch Befehle direkt ausführen (z. B. über die Menüoption "Ausführen" des Startmenüs), sucht das Windows-Betriebssystem möglicherweise an einigen zusätzlichen Stellen nach Befehlen. In Windows XP / neuer können Sie beispielsweise Folgendes ausführen:
reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths"
Wenn der Befehl, den Sie ausführen möchten, unter "Anwendungspfade" aufgeführt ist, findet Windows das Programm möglicherweise auch dann, wenn es sich nicht im Pfad befindet. Windows wird wahrscheinlich sogar MEHR finden als nur das, was CMD in dem von CMD verwendeten PFAD finden würde.
Ein möglicher Vorteil ist, dass CMD so ausgeführt werden soll, dass auf eine Umgebungsvariable wie% USERPROFILE% oder% LOGONSERVER% oder% TEMP% /% TMP% verwiesen werden kann müssen "
CMD /C
" ausführen .Für Ihren speziellen Fall gibt es also keinen guten Grund, dies zu tun. Die Effekte, die Sie erzielen, bestehen darin, dass Ihr Computer mehr Arbeit leistet, den Prozess verlangsamt und mehr Speicher verbraucht (und dies alles in vernachlässigbarem Umfang auf modernen Geräten).
quelle
cmd /c
. So etwas wiecmd /c start /low Notepad.exe
.pbrush
ist ein App Path fürmspaint
und funktioniert nicht in viele Orte).REG_EXPAND_SZ
, können Sie Umgebungsvariablen erweitern (mit derselben%syntax%
), ohne cmd aufzurufen. Die in Dateizuordnungen verwendeten Verben werden über aufgerufenShellExecuteEx
, sodass hier Anwendungspfade gelten.Weil es die Färbung loswird.
Es kann sein, dass sie denken, dass die Leute den blauen Hintergrund als störend empfinden.
quelle
Mit
cmd powershell
fordern Sie die aktuelle Shell Explorer auf, cmd mit Parameternpowershell, "imageSeqView ..."
mit dem analysierten Wert% 1 bis cmd aufzurufen .In diesem Fall
"powershell"
wird von cmd erwartet, dass es sich entweder um einen cmd-Befehl, eine exe oder ein von cmd unterstütztes Skript handelt, z. B. bat.Mit
powershell "imageSeqView ..."
fordern Sie die aktuelle Shell Explorer auf,powershell
mit ParameternimageSeqView ...
mit dem analysierten Wert% 1 für Powershell aufzurufen."
imageSeqView
" In diesem Fall wird von Powershell erwartet, dass es sich entweder um ein Cmdlet, ein Exe- oder ein Powershell-Skript handelt.Vorausgesetzt, "
imageSeqView
" ist eine Powershell-Funktion, ist der 1. Weg völlig unnötig und verringert die Leistung geringfügig.Für Befehlsfensteroptionen gibt es ähnliche Optionen in Powershell wie -NoExit, die mit / K in cmd identisch sein sollten.
Beim Initialisieren von Umgebungsvariablen kann Powershell dasselbe tun.
quelle