web-dev-qa-db-ja.com

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

私はこの質問に 与えられている指示に従ってレジストリを使って私の最初のコンテキストメニューを追加しました (私はうん).

私はもともとこれを実行するコマンド、すなわち "command"キーの値として使っていました。

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

ImageSeqViewは私のpowershell関数の名前です。私はそれを自分のpowershellプロファイルにインポートします。それはうまく機能しますが、私は思っています:なぜcmdを使って関数を実行するためにPowershellを開くのですか?それをするほうが簡単ではないでしょうか。

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

このコマンドはうまく機能するようですが、cmdを使用することは正規のように思われるので、それはひそかに子犬か何かを殺しているのだろうか?

enter image description here

25
stib

これをする良い理由はありません。実際、起こる唯一の本当の効果は物事を遅くすることです。

人々はこれをするのに十分な理由があると思うかもしれません。 CMDを使用すると、次のような効果があります。これは、場合によっては一般的に有効です。

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

ただし、この場合、これらの利点はどちらも得られません。これら両方のシナリオを見てみましょう。

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

しかし、このシナリオでは、 "CMD /C DIR"を実行しようとすると、Windowsは "CMD"という名前の実行可能ファイルを探し、それからCMDが "DIR"コマンドを正常に実行するため、これでうまくいきます。これは "CMD"コマンドの内部部分です。

この場合、 "CMD /C powershell"と同じくらい簡単にpowershellを実行することができるので、不要な "CMD /C"から恩恵を受けることはできません。 "CMD /C"とタイプするという追加のステップを踏むことで私が見ている唯一の利点は、誰かがコマンドライン "DIR"または "COPY"を実行するように例を修正しようとする場合に役立つ例を提供することです。より柔軟な例を持つことは、一部の人にとって役に立つかもしれません。人々が自分たちのしていることを知っているときは、実際には必要ありません。

私が提供した2番目の箇条書き(環境変数の設定)については、これはこの特定のケースでは積極的に行っていないことでもあります。 PATH環境変数を設定することで問題を解決していると考える人もいるかもしれません。ただし、コマンドを直接実行すると(たとえば[スタート]メニューの[ファイル名を指定して実行]メニューオプションから)、Windowsオペレーティングシステムはいくつかの追加の場所でコマンドを探すことがあります。たとえば、Windows XP/newerでは、次のコマンドを実行できます。

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

実行したいコマンドが[App Path]の下に表示されている場合は、そのパスにパスがなくても、Windowsによってプログラムが検出されることがあります。そのため、Windowsは、CMDが使用するPATHにCMDが見つけるものよりもさらに多くのものを見つける可能性があります。

CMDを実行して%USERPROFILE%、%LOGONSERVER%、%TEMP%/%TMP%などの環境変数を参照できるようにしたい場合がありますが、そうしていないのでそうではありません。 "CMD /C"を実行する必要があります。

だから、あなたの特定の場合のために:それをするのに良い理由はありません。あなたが達成している効果はあなたのコンピュータにもっと多くの仕事をさせて、プロセスを遅くして、そしてもっと多くのメモリを使い果たしていることです。

29
TOOGAM

それは着色を取り除くからです。

彼らは人々が青い背景が気を散らすと感じると思うかもしれません。

18
Mehrdad

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

この場合、"powershell"はcmdによってcmdコマンド、exe、またはcmdがサポートするスクリプトのいずれかであることが期待されています。コウモリ。

powershell "imageSeqView ..."を使用すると、現在のシェルであるExplorerに、%1のパースされた値を持つパラメータimageSeqView ...を指定してpowershellにpowershellを呼び出すように依頼します。

この場合、 "imageSeqView"はコマンドシェル、exeファイル、またはpowershellスクリプトのいずれかであるとPowerShellによって想定されています。

"imageSeqView"がべき乗関数であると仮定すると、1番目の方法は完全に不要であり、パフォーマンスがわずかに低下します。

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

パイプライン処理、環境変数の初期化、powershellの場合も同様に行えます。

1
chingNotCHing