为什么使用“Cmd /c Powershell”而不仅仅是“Powershell”?

sti*_*tib 27 windows windows-registry powershell command-line

我已经按照这个问题中给出的说明使用注册表添加了我的第一个上下文菜单(是的,我)。

我最初使用它作为它执行的命令,即“命令”键的值:

Cmd /C Powershell  "imageSeqView --% \"%1\""
Run Code Online (Sandbox Code Playgroud)

ImageSeqView是我的 powershell 函数的名称,我将它导入到我的 powershell 配置文件中。它工作正常,但我想知道:为什么使用cmdopenPowershell来执行该功能?只是这样做不是更简单吗

Powershell  "imageSeqView --% \"%1\""
Run Code Online (Sandbox Code Playgroud)

该命令似乎工作得很好,但是由于使用起来似乎很规范,cmd我想知道它是在暗中杀死小狗还是什么?

在此处输入图片说明

TOO*_*GAM 31

没有充分的理由这样做。事实上,发生的唯一真正影响是减慢速度。

人们可能认为这样做是有充分理由的。使用 CMD 具有以下效果,在某些情况下通常会很好:

  • 启用内部命令,如“ DIR
  • 设置环境变量,例如 PATH 变量

然而,在这种情况下,这些好处都没有。让我们看看这两种情况:

因此,在某些情况下,有时会使用“ 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 使用的 PATH 中找到的更多内容。

一个可能的好处是,如果您希望运行 CMD 以便您可以引用像 %USERPROFILE% 或 %LOGONSERVER% 或 %TEMP%/%TMP% 这样的环境变量,但由于您没有这样做,因此您不是需要运行“ CMD /C”。

因此,对于您的特定情况:没有充分的理由这样做。您正在实现的效果是让您的计算机做更多的工作,减慢进程,并使用更多的内存(所有这些在现代设备上都是微不足道的)。

  • ftr - 启动具有不同优先级的进程是 `cmd /c` 的一个很好的用例。类似于`cmd /c start /low Notepad.exe`。 (2认同)

use*_*686 18

因为它摆脱了着色。

可能是他们认为人们发现蓝色背景分散注意力。