Dodałem moje pierwsze menu kontekstowe za pomocą rejestru zgodnie z instrukcjami podanymi w tym pytaniu (tak, ja).
Pierwotnie użyłem tego jako polecenia, które wykonuje, tj. Wartości klawisza „polecenie”:
Cmd /C Powershell "imageSeqView --% \"%1\""
ImageSeqView
to nazwa mojej funkcji PowerShell, importuję ją do mojego profilu PowerShell. Działa dobrze, ale zastanawiam się: cmd
po co otwierać w Powershell
celu wykonania funkcji? Czy nie byłoby łatwiej po prostu to zrobić
Powershell "imageSeqView --% \"%1\""
To polecenie wydaje się działać dobrze, ale skoro wydaje się kanoniczne cmd
, zastanawiam się, czy potajemnie zabija szczenięta czy coś takiego?
windows
command-line
powershell
windows-registry
dźgnięcie
źródło
źródło
cmd /c
...cmd /k
nie różni się tym, że pozostawia otwarte okno po zakończeniu polecenia. Prawdopodobnie pytający zrobił to w ten sposób, aby mogli zobaczyć dane wyjściowe do celów debugowania.cmd
, które wydaje się wszechobecne w moich badaniach.cmd /c powershell
szczególnie polecają ? Znowu ten, który podłączyłeś, nie zawiera takich zaleceń.Odpowiedzi:
Nie ma dobrego powodu, aby to zrobić. W rzeczywistości jedynym prawdziwym efektem jest spowolnienie.
Ludzie mogą myśleć, że istnieje dobry powód, aby to zrobić. Korzystanie z CMD ma następujące efekty, które zwykle mogą być dobre w niektórych przypadkach:
DIR
”Jednak w tym przypadku nie uzyskuje się żadnej z tych korzyści. Spójrzmy na oba te scenariusze:
Dlatego w niektórych przypadkach może być czas, kiedy użycie „
CMD /C
” jest przydatne. Na przykład, jeśliPSEXEC
użyję zewnętrznego polecenia (pobranego z SysInternals) i spróbuję uruchomić „DIR
” na komputerze zdalnym, wtedy Windows spróbuje uruchomić polecenie „DIR
”. System Windows nie uruchomi tego polecenia, ponieważ nie ma pliku „DIR.EXE
”, „DIR.BAT
” lub „DIR
” kończącego się innym obsługiwanym rozszerzeniem. (Obsługiwane rozszerzenia można zobaczyć, uruchamiając „ECHO %PATHEXT%
”.)Jednak w tym scenariuszu, jeśli spróbuję uruchomić „
CMD /C DIR
”, to zadziała, ponieważ system Windows wyszuka plik wykonywalny o nazwie „CMD
” i znajdzie go, a następnieCMD
pomyślnie uruchomi polecenie „DIR
”, które jest wewnętrznym częśćCMD
polecenia „ ”.W takim przypadku możesz uruchomić
powershell
tak łatwo, jak „CMD /C powershell
”, więc nie zyskujesz na niepotrzebnym „CMD /C
”. Jedyną korzyścią, jaką widzę, przechodząc przez dodatkowy etap pisania „CMD /C
”, jest podanie przykładu, który będzie przydatny, jeśli ktoś zdecyduje się zmodyfikować przykład, aby uruchomić wiersz polecenia „DIR
” lub „COPY
”. Bardziej elastyczny przykład może być przydatny dla niektórych osób. To naprawdę nie jest potrzebne, gdy ludzie wiedzą, co robią.Jeśli chodzi o drugi punkt, który podałem, który polega na ustawianiu zmiennych środowiskowych, jest to również coś, czego nie aktywnie robisz w tym konkretnym przypadku. Być może niektórzy ludzie myślą, że pomagają, powodując ustawienie zmiennej środowiskowej PATH. Jednak po uruchomieniu poleceń bezpośrednio (np. Z opcji menu „Uruchom” w menu Start) system operacyjny Windows może szukać poleceń w niektórych dodatkowych miejscach. Na przykład w systemie Windows XP / nowszym możesz uruchomić:
reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths"
Jeśli polecenie, które chcesz uruchomić, znajduje się na liście „Ścieżki aplikacji”, system Windows może znaleźć program, nawet jeśli nie znajduje się on na ścieżce. Tak więc Windows prawdopodobnie znajdzie WIĘCEJ niż tylko to, co CMD znajdzie w ŚCIEŻCE, której używa CMD.
Jedną z możliwych korzyści jest to, że chcesz uruchomić CMD, abyś mógł odwoływać się do zmiennej środowiskowej, takiej jak% USERPROFILE% lub% LOGONSERVER% lub% TEMP% /% TMP%, ale ponieważ tego nie robisz, nie jesteś trzeba uruchomić „
CMD /C
”.Tak więc w twoim konkretnym przypadku: nie ma dobrego powodu, aby to zrobić. Osiągane efekty to większa wydajność pracy komputera, spowolnienie procesu i zużycie pamięci (wszystko to w niewielkim stopniu na nowoczesnym sprzęcie).
źródło
cmd /c
. Coś jakcmd /c start /low Notepad.exe
.pbrush
jest to ścieżka aplikacjimspaint
i nie będzie działać w wiele miejsc).REG_EXPAND_SZ
, możesz rozszerzać zmienne środowiskowe (używając tego samego%syntax%
) bez wywoływania cmd. Czasowniki używane w powiązaniach plików są wywoływane przezShellExecuteEx
, więc tutaj obowiązują ścieżki aplikacji.Ponieważ pozbywa się zabarwienia.
Może być tak, że ludzie uważają, że niebieskie tło rozprasza.
źródło
Za pomocą
cmd powershell
pytasz bieżącą powłokę, eksploratora, aby wywołała cmd z parametramipowershell, "imageSeqView ..."
o przeanalizowanej wartości% 1 do cmd.W tym przypadku
"powershell"
cmd oczekuje, że będzie to polecenie cmd, exe lub jeden ze obsługiwanych skryptów cmd, np. Bat.Za pomocą
powershell "imageSeqView ..."
pytasz bieżącą powłokę, eksploratora, aby wywołałapowershell
z parametremimageSeqView ...
o przeanalizowanej wartości% 1 do PowerShell.W takim przypadku „
imageSeqView
” oczekuje się, że PowerShell będzie poleceniem cmdlet, exe lub skryptem PowerShell.Pod warunkiem, że „
imageSeqView
” jest funkcją PowerShell, pierwszy sposób jest całkowicie niepotrzebny i nieznacznie obniża wydajność.Dla opcji okna poleceń istnieją podobne opcje w PowerShell, takie jak -NoExit, które powinny być takie same jak / K w cmd.
W przypadku wykładania rur, inicjowania zmiennych środowiska env, PowerShell może zrobić to samo.
źródło