為什麼使用“Cmd /c Powershell”而不僅僅是“Powershell”?

為什麼使用“Cmd /c Powershell”而不僅僅是“Powershell”?

我已經按照中給出的說明使用註冊表添加了我的第一個上下文選單這個問題(是我)。

我最初使用它作為它執行的命令,即“command”鍵的值:

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 在 CMD 使用的 PATH 中找到的更多內容。

一個可能的好處是,如果您希望執行 CMD,以便可以引用 %USERPROFILE% 或 %LOGONSERVER% 或 %TEMP%/%TMP% 等環境變量,但由於您沒有這樣做,所以您不會需要執行「CMD /C」。

因此,對於您的具體情況:沒有充分的理由這樣做。您所實現的效果是讓您的電腦執行更多工作,減慢進程速度,並佔用更多記憶體(所有這些在現代裝置上都可以忽略不計)。

答案2

因為它消除了顏色。

他們可能認為藍色背景會分散人們的注意力。

答案3

使用cmd powershell,您可以要求目前 shell、資源管理器呼叫 cmd,並使用powershell, "imageSeqView ..."解析值為 %1 的參數來呼叫 cmd。

在這種情況下,"powershell"cmd 期望是 cmd 指令、exe 或 cmd 支援的腳本之一,例如 bat。

使用powershell "imageSeqView ...",您可以要求目前 shell(資源管理器)使用解析值為 %1 的參數powershell呼叫powershell。imageSeqView ...

在這種情況下,imageSeqViewpowershell 期望「 」是 cmdlet、exe 或 powershell 腳本。

如果「imageSeqView」是一個powershell函數,則第一種方式完全沒有必要,並且會稍微降低效能。

對於命令視窗選項,powershell 中也有類似的選項,例如 -NoExit,應該與 cmd 中的 /K 相同。

對於管道襯裡、初始化環境變量,powershell 也可以做到同樣的事情。

相關內容