我已按照以下说明使用注册表添加了第一个上下文菜单这个问题(耶我)。
我最初用这个作为它执行的命令,即“命令”键的值:
Cmd /C Powershell "imageSeqView --% \"%1\""
ImageSeqView
是我的 powershell 函数的名称,我将其导入到我的 powershell 配置文件中。它工作正常,但我想知道:为什么要使用cmd
openPowershell
来执行该函数?直接执行不是更简单吗?
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 ...
在这种情况下,imageSeqView
powershell 希望“ ”是一个 cmdlet、一个 exe 或一个 powershell 脚本。
假设“ imageSeqView
”是一个 powershell 函数,那么第一种方法完全没有必要,而且会稍微降低性能。
对于命令窗口选项,powershell中也有类似的选项比如-NoExit,应该和cmd中的/K一样。
对于管道,初始化环境变量,powershell 可以同样做到。