「Powershell」ではなく「Cmd /c Powershell」を使用するのはなぜですか?

「Powershell」ではなく「Cmd /c Powershell」を使用するのはなぜですか?

レジストリを使用して、最初のコンテキストメニューを追加しました。この質問(やったー)。

もともと、これを実行するコマンド、つまり「command」キーの値として使用していました。

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

ImageSeqViewは私のPowerShell関数の名前です。PowerShellプロファイルにインポートします。問題なく動作しますが、疑問に思うことがあります。関数を実行するためになぜcmdopenを使用するのでしょうPowershellか?単に次のようにする方が簡単ではないでしょうか?

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

そのコマンドは問題なく動作するようですが、使用するのが標準的な方法のように見えるので、cmd子犬を密かに殺したりしているのではないかと思っています。

ここに画像の説明を入力してください

答え1

これを行う正当な理由はありません。実際、発生する唯一の実際の効果は、物事が遅くなることです。

これを行うには十分な理由があると考える人もいるかもしれません。CMD を使用すると、次のような効果が得られ、場合によっては良い結果をもたらすことがあります。

  • DIR「 」のような内部コマンドを有効にします
  • PATH変数などの環境変数を設定します

ただし、この場合は、どちらのメリットも得られません。次の 2 つのシナリオを見てみましょう。

したがって、場合によっては、「CMD /C」を使用すると便利な場合があります。たとえば、外部コマンドPSEXEC(SysInternals からダウンロード) を使用して、DIRリモート コンピューターで「 」を実行しようとすると、Windows は「 」コマンドを実行しようとします。Windows は、サポートされている別の拡張子で終わる「 」、「」、または「 」ファイルDIRがないため、そのコマンドを実行できません。(サポートされている拡張子は、「 」を実行すると確認できます。)DIR.EXEDIR.BATDIRECHO %PATHEXT%

ただし、このシナリオでは、「 」を実行しようとするとCMD /C DIR、Windows が「 」という名前の実行可能ファイルを検索しCMD、それを見つけて、「 」コマンドの内部部分である「 」コマンドCMDを正常に実行するので、実行は機能します。DIRCMD

この場合は、powershell" " と同じように簡単に実行できるのでCMD /C powershell、不要な " " の利点はありませんCMD /C。" " と入力するという余分な手順を踏むことの唯一の利点は、CMD /C誰かが例を変更してコマンド ライン " DIR" または " COPY" を実行しようと決めた場合に役立つ例を提供することです。より柔軟な例があると、一部の人にとっては役立つ場合があります。人々が何をしているのかわかっている場合、これは実際には必要ありません。

私が挙げた 2 番目の箇条書き、つまり環境変数の設定についても、この特定のケースでは積極的に実行していません。PATH 環境変数を設定することで状況が改善されると考える人もいるかもしれません。ただし、コマンドを直接実行すると (たとえば、[スタート] メニューの [実行] メニュー オプションから)、Windows オペレーティング システムは追加の場所でコマンドを探す場合があります。たとえば、Windows XP 以降では、次のように実行できます。

reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths"

実行したいコマンドが「アプリ パス」の下にリストされている場合、パス内になくても Windows はプログラムを見つける可能性があります。そのため、Windows は CMD が使用する PATH で CMD が見つけるものよりもさらに多くのものを見つける可能性があります。

考えられる利点の 1 つは、CMD を実行して %USERPROFILE% や %LOGONSERVER% や %TEMP%/%TMP% などの環境変数を参照できるようにすることですが、これを実行していないため、" CMD /C" を実行する必要はありません。

したがって、あなたの特定のケースでは、これを行う正当な理由はありません。あなたが達成する影響は、コンピュータにより多くの作業を行わせ、プロセスを遅くし、より多くのメモリを使用することです (これらすべてが、最新の機器では無視できる量で行われます)。

答え2

着色がなくなるからです。

青い背景は人々の気を散らすものだと彼らは考えているのかもしれません。

答え3

を使用すると、現在のシェルである explorer に、解析された値 %1 を cmd に指定したcmd powershellパラメータで cmd を呼び出すように要求します。powershell, "imageSeqView ..."

この場合、"powershell"cmd では、 が cmd コマンド、exe、または cmd でサポートされているスクリプト (例: bat) のいずれかであることが想定されます。

を使用するとpowershell "imageSeqView ..."、現在のシェルであるエクスプローラーに、解析された値 %1 を含むpowershellパラメーターを指定してimageSeqView ...PowerShell を呼び出すように要求します。

この場合、imageSeqViewPowerShell では、" " はコマンドレット、exe、または PowerShell スクリプトのいずれかであると想定されます。

「 」が PowerShell 関数である場合imageSeqView、1 番目の方法はまったく不要であり、パフォーマンスがわずかに低下します。

コマンド ウィンドウ オプションについては、PowerShell に -NoExit などの同様のオプションがあり、これは cmd の /K と同じになります。

パイプライン処理や環境変数の初期化については、PowerShell でも同様に実行できます。

関連情報