「Powershell」ではなく「Cmd / c Powershell」を使用する理由


25

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

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

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

ImageSeqViewは、PowerShell関数の名前です。PowerShellプロファイルにインポートします。それはうまく動作しますが、私は疑問に思っています:なぜ関数を実行するためcmdに開くのPowershellですか?単純にやるのではないでしょうか

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

そのコマンドはうまく機能しているように見えますが、使用することは標準的なように思えるので、cmd子犬や何かを密かに殺すのだろうか?

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


2
リンクされた質問use cmd /c... の答えはどれも、コマンドが完了した後にウィンドウを開いままにcmd /kしておくという点でかなり異なります。おそらく、質問者はデバッグを目的として出力を見ることができるようにそのようにしたのでしょう。
ボブ

1
それは私が疑問に思っている修飾語ではなく、tiの使用cmdであり、これは私の研究から遍在しているようです。
-stib

実際にcmd /c powershell具体的に推奨しているリファレンスを提供できますか?繰り返しますが、リンクしたものはそのような推奨を行いません。
ボブ


3
推測では、それはおそらく貨物のカルトです。これが望ましい場合がいくつかあります(つまり、パイピングのようなcmd構造を使用したい場合)が、とにかく同じことをpowershellで実行できる場合は実際には適用されません。MSDNのドキュメントには、これが必要であることを示唆するものは何もありませんが、ファイルの関連付けに関するドキュメントはかなりまばらです。
ボブ

回答:


29

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

これを行う正当な理由があると人々は考えるかもしれません。CMDを使用すると、次のような効果が得られます。これらの効果は、場合によっては一般的に有効です。

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

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

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

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

この場合、powershellCMD /C powershell」と同じくらい簡単に実行できるので、不要な「CMD /C」のメリットは得られません。「CMD /C」を入力する追加のステップを通過することで得られる唯一の利点は、コマンドライン「DIR」または「COPY」を実行するために例を変更しようとする場合に役立つ例を提供することです。より柔軟な例を持っていることは、一部の人々にとって役に立つかもしれません。人々が自分のしていることを知っているとき、それは本当に必要ありません。

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

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

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

可能な利点の1つは、%USERPROFILE%、%LOGONSERVER%、%TEMP%/%TMP%などの環境変数を参照できるようにCMDを実行したい場合ですが、そうしないので、 「CMD /C」を実行する必要があります。

だから、あなたの特定の場合:それをする正当な理由はありません。あなたが達成している効果は、コンピューターにもっと多くの仕事をさせて、プロセスを遅くし、より多くのメモリを使用することです(それらはすべて現代の機器で無視できる量でしています)。


ボブのアドバイスに完全に同意します。ボブはあなたを正しい道へと導きました。しかし、私が物事を読んでいるうちに、より多くの情報がもう少し明確になるのに役立つと思った。
TOOGAM

2
ftr-異なる優先度でプロセスを開始することは、の良い使用例ですcmd /c。のようなものcmd /c start /low Notepad.exe
リーベン・キースメーカーズ

いい答えだ。私が言及したことの1つは、これもcmdのautorunを実行することですが、通常は設定されておらず、設定されていてもファイルの関連付けではおそらく望ましくありません。そしてLievenは優先順位で良い点を示していますが、これもファイルの関連付けには少し奇妙だと思います。
ボブ

1
cmd自体は環境変数を設定しません。環境は親プロセスから継承され、その間にcmdを追加してもそれに関する変更はありません。App Pathsは、私が知る限り、ShellExecuteでのみ使用され、CreateProcessでは使用されません。そのため、ほとんどの状況(特にシェル)では、それらは適用されません(自分で試すことができpbrush、App Path mspaintは動作しません)多くの場所)。
ジョーイ

@Joeyはおそらく変数を展開すると言う方が正しいでしょう...しかし、考えてみると、REG_EXPAND_SZ使用すると、%syntax%cmdを呼び出さずに環境変数を(同じを使用して)展開できます。ファイルの関連付けで使用される動詞はを介して呼び出されるShellExecuteExため、ここではApp Pathが適用されます。
ボブ

18

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

人々が青い背景が気を散らしていると思うと思うかもしれません。


1
Windowsは便利ではありませんが、コンソールのプロパティで背景色を設定することはできませんか?
ルスラン

1
理由はないことを示唆する私の競合する答えにもかかわらず、賛成です。なぜなら、これは賢明な理由だからです。よくやった。もちろん、一部の人々は、黒いボックスが青いボックスよりも気を散らすことに気付くかもしれません。しかし、それは好みの問題であり、人々は異なる好みを持つことができるので、+ 1を行って適切で正確な答えを得てください。@Rusland:ええ、でも簡単なプログラムが消える前にその変更を何とかすることができますか?(そして、1つのセッションに加えられた変更が他のセッションに影響するかどうかを知っていますか?一般的なケースとデスクトップアイコンのような特定のケースで設定は異なりますか?)
TOOGAM

私はデフォルトのコンソールとしてconEmuを使用するので、私は、私はいつも私のきちんと構成されたコンソールウィンドウを取得する意味、それに気づくことはありません(。あまりにも10分以内でASCIIアート、カスタムプロンプトと燃えるたいまつのGIFファイルをロードして!)
STIB

1

を使用してcmd powershell、現在のシェルであるエクスプローラーに、powershell, "imageSeqView ..."%1からcmdへの解析値を持つパラメーターでcmdを呼び出すように要求します。

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

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

この場合、 " imageSeqView"はpowershellによってコマンドレット、exe、またはpowershellスクリプトのいずれかであると予想されます。

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

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

パイプライン処理、env変数の初期化については、powershellでも同じことができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.