Я добавил свое первое контекстное меню, используя реестр в соответствии с инструкциями, приведенными в этом вопросе .
Первоначально я использовал это как команду, которую он выполняет, то есть значение клавиши «команда»:
Cmd /C Powershell "imageSeqView --% \"%1\""
ImageSeqView
это имя моей функции powershell, я импортирую ее в свой профиль powershell. Работает нормально, но мне интересно: зачем использовать cmd
open Powershell
для выполнения функции? Не было бы проще просто сделать
Powershell "imageSeqView --% \"%1\""
Эта команда, кажется, работает отлично, но так как она кажется канонической для использования, cmd
мне интересно, тайно ли она убивает щенков или что-то в этом роде?
cmd /c
...cmd /k
не отличается тем, что оставляет окно открытым после завершения команды. Предположительно, аскер сделал это таким образом, чтобы они могли видеть выходные данные в целях отладки.cmd
вообще его использование, что, как мне кажется, повсеместно в моих исследованиях.cmd /c powershell
конкретно? Опять же, тот, кого вы связали, не дает такой рекомендации.Ответы:
Нет веских причин для этого. Фактически, единственный реальный эффект, который случается, состоит в том, чтобы замедлить вещи.
Люди могут подумать, что для этого есть веская причина. Использование CMD имеет следующие эффекты, которые обычно могут быть хорошими в некоторых случаях:
DIR
"Однако в этом случае ни одно из этих преимуществ не будет получено. Давайте посмотрим на оба этих сценария:
Таким образом, в некоторых случаях может быть
CMD /C
полезно использовать « ». Например, если я использую внешнюю командуPSEXEC
(загруженную из SysInternals) и пытаюсь запустить «DIR
» на удаленном компьютере, то Windows попытается выполнить команду «DIR
». Windows не сможет выполнить эту команду, так как нет файла "DIR.EXE
", "DIR.BAT
" или "DIR
", заканчивающегося другим поддерживаемым расширением. (Поддерживаемые расширения можно увидеть, запустив "ECHO %PATHEXT%
".)Однако в этом сценарии, если я попытаюсь запустить "
CMD /C DIR
", то это сработает, потому что Windows будет искать исполняемый файл с именем "CMD
" и найдет его, а затем вCMD
конечном итоге успешноDIR
выполнит команду " ", которая является внутренней часть команды "CMD
".В этом случае вы можете просто запускать
powershell
так же легко, как «CMD /C powershell
», так что вы не получите никакой выгоды от ненужного «CMD /C
». Единственное преимущество, которое я вижу при прохождении дополнительного этапа ввода "CMD /C
", - это предоставить пример, который будет полезен, если кто-то решит попробовать изменить пример для запуска командной строки "DIR
" или "COPY
". Наличие более гибкого примера может быть полезно для некоторых людей. Это действительно не нужно, когда люди знают, что они делают.Что касается второго пункта, который я указал, который заключается в установке переменных среды, то это также то, что вы не делаете активно в данном конкретном случае. Может быть, некоторые люди думают, что они помогают, вызывая переменную среды PATH. Однако, когда вы запускаете команды напрямую (например, из пункта меню «Выполнить» в меню «Пуск»), операционная система Windows может искать команды в некоторых дополнительных местах. Например, в Windows XP / новее вы можете запустить:
reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths"
Если команда, которую вы хотите выполнить, указана в разделе «Пути к приложениям», Windows может найти программу, даже если ее нет в пути. Таким образом, Windows, вероятно, найдет даже БОЛЬШЕ, чем то, что CMD найдет в ПУТИ, который использует CMD.
Одно из возможных преимуществ заключается в том, что если вы хотите, чтобы CMD запускался так, чтобы вы могли ссылаться на переменную среды, такую как% USERPROFILE% или% LOGONSERVER% или% TEMP% /% TMP%, но поскольку вы этого не делаете, вы не нужно бежать "
CMD /C
".Итак, для вашего конкретного случая: нет веских причин для этого. Эффекты, которые вы достигаете, - это то, что ваш компьютер выполняет больше работы, замедляет процесс и использует больше памяти (и все это вы делаете на незначительном количестве на современном оборудовании).
источник
cmd /c
. Нечто подобноеcmd /c start /low Notepad.exe
.pbrush
это путь к приложениюmspaint
и не будет работать в много мест).REG_EXPAND_SZ
вы можете расширять переменные окружения (используя то же самое%syntax%
), не вызывая cmd. Глаголы, используемые в ассоциациях файлов, вызываются черезShellExecuteEx
, поэтому пути к приложениям здесь применимы.Потому что это избавляет от окраски.
Возможно, они думают, что люди считают синий фон отвлекающим.
источник
С помощью
cmd powershell
вы просите текущую оболочку, проводник, вызвать cmd с параметрамиpowershell, "imageSeqView ..."
с анализируемым значением от% 1 до cmd.В этом случае
"powershell"
ожидается, что cmd будет либо командой cmd, exe, либо одним из поддерживаемых сценариев cmd, например bat.С помощью
powershell "imageSeqView ..."
этого вы просите текущую оболочку, проводник, вызватьpowershell
параметрыimageSeqView ...
с проанализированным значением% 1 для powershell.В этом случае
imageSeqView
ожидается, что "" PowerShell - это командлет, исполняемый файл или сценарий PowerShell.При условии, что "
imageSeqView
" является функцией powershell, 1-й способ совершенно не нужен и немного снижает производительность.Для параметров командного окна в PowerShell существуют аналогичные параметры, такие как -NoExit, которые должны быть такими же, как / K в cmd.
Для выравнивания конвейера, инициализации переменных env, powershell может работать одинаково.
источник