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

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

我已按照以下说明使用注册表添加了第一个上下文菜单这个问题(耶我)。

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

Cmd /C Powershell  "imageSeqView --% \"%1\""

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

Powershell  "imageSeqView --% \"%1\""

该命令似乎工作得很好,但由于它似乎是规范使用的,cmd我想知道它是否会秘密杀死小狗或类似的东西?

在此处输入图片描述

答案1

这样做没有任何好处。事实上,这样做的唯一实际效果就是让事情慢下来。

人们可能会认为这样做是有充分理由的。使用 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 在其使用的 PATH 中找到的还要多。

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

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

答案2

因为它会去除颜色。

他们可能认为蓝色背景会分散人们的注意力。

答案3

使用cmd powershell,您要求当前shell explorer使用powershell, "imageSeqView ..."解析值为%1的参数调用cmd。

在这种情况下,"powershell"cmd 期望是一个 cmd 命令、一个 exe 或 cmd 支持的脚本之一,例如 bat。

使用powershell "imageSeqView ...",您要求当前 shell explorer 使用解析值为 %1 的powershell参数来调用 powershell。imageSeqView ...

在这种情况下,imageSeqViewpowershell 希望“ ”是一个 cmdlet、一个 exe 或一个 powershell 脚本。

假设“ imageSeqView”是一个 powershell 函数,那么第一种方法完全没有必要,而且会稍微降低性能。

对于命令窗口选项,powershell中也有类似的选项比如-NoExit,应该和cmd中的/K一样。

对于管道,初始化环境变量,powershell 可以同样做到。

相关内容