cmd.exe で「コマンド プロンプトをここで開く」シェル拡張機能をカスタマイズする

cmd.exe で「コマンド プロンプトをここで開く」シェル拡張機能をカスタマイズする

次の状況について、誰かヒントがあるか知りたいと思いました。私は自分のニーズに合わせてコマンド プロンプトをカスタマイズしており、最近、ユーザーのプロンプトを変更しました。プロンプトにパスを表示する代わりに、常にウィンドウ タイトルにしたいと思っています。

新しいレジストリキーを

HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Command Processor/AutoRun

価値のある

title %cd% 

このスクリプトは、コマンド プロンプトが起動するたびに実行されます。これは機能します。ショートカット経由でコマンド プロンプトを開くたびに、これは適切に動作します。

しかし、右クリック -> コマンドプロンプトをここで開くでコマンドプロンプトを開くと、どうやら実行されないようです。ここで開くためのシェルコマンドを調べてみました。

HKEY_CLASSES_ROOT/Directory/shell/cmd/command

デフォルトでは次のように設定されています:

cmd.exe /s /k pushd "%V"

これを次のように変更してみました:

cmd.exe /s /k "cd %1 & title %cd%"

「%1」は、オンラインの他の場所で open-here スクリプト用に提案されたもので、私の理解が正しければ、& は両方のコマンドを実行するはずです。ただし、ここでコマンド プロンプトを開くたびに機能するわけではありません。作業ディレクトリは確かに正しいのですが、ウィンドウ タイトルは依然として「C:\Windows\System32」のままです。

何かヒントはありますか?

答え1

解決にかなり近づきました。私の場合は次のコマンドが機能します:

cmd.exe /s /k "pushd ""%V"" & title %V"

編集: レジストリには、「コマンド プロンプト」シェル拡張をサポートする場所がいくつかあります。この変更をすべてのオブジェクト (ディレクトリ、ドライブ、および特別なフォルダー) で一貫して機能させるには、レジストリで のすべての出現を検索しcmd.exe /s /k pushd "%V"、上記の値に置き換える必要があります。

答え2

このウェブサイトを試してみてください。彼らは本当に役に立ちます。すべてのスイッチの詳細が載っています。

http://ss64.com/nt/cmd.html

いいえ、私はそのウェブサイトとは何の関係もありません。ただ役に立ちたいだけです。これらの人々と SuperUser.com ウェブサイトは、何百回も私を助けてくれました。

CMD.exe 新しい CMD シェルを起動し、(オプションで) コマンド/実行可能プログラムを実行します。

Syntax
      CMD [charset] [options]
      CMD [charset] [options] [/c Command] 
      CMD [charset] [options] [/k Command] 

Options   
   /C     Run Command and then terminate
   /K     Run Command and then return to the CMD prompt.
          This is useful for testing, to examine variables

   Command : The command, program or batch script to be run.
             This can even be several commands separated with '&' 
             (the whole should also be surrounded by "quotes")

   /T:fg  Sets the foreground/background colours 
   /X     Enable extensions to CMD.EXE
   /Y     Disable extensions to CMD.EXE 
   /A     Output ANSI characters
   /U     Output UNICODE characters (UCS-2 le)
          These options will affect piping or redirecting to a file.
          Most common text files are ANSI, use these switches
          when you need to convert the character set.
   /D Ignore registry AutoRun commands
      HKLM | HKCU \Software\Microsoft\Command Processor\AutoRun
   /F:ON Enable auto-completion of pathnames entered at the CMD prompt
   /F:OFF Disable auto-completion of pathnames entered at the CMD prompt (default)At the command prompt Ctrl-D gives folder name completion and Ctrl-F gives File and folder name completion.

These key-strokes will display the first matching path. Thereafter, repeated pressing of the same control key will cycle through the list of matching paths. Pressing SHIFT with the control key will move through the list backwards. 
   /Q    Turn echo off
   /S    Strip quote characters from the command_line
   /V:ON Enable delayed environment variable expansion 
         this allows a FOR loop to specify !variable! instead of %variable% 
         expanding the variable at execution time instead of at input time. 
   /V:OFF Disable delayed environment expansion.

   Environment expansion preference can be set permanently in the registry
   HKLM | HKCU  \Software\Microsoft\Command Processor\DelayedExpansion
   Set to either 0x1 or 0x0

   /knetdiag /debug 
   /knetdiag /fix

   The knetdiag switches are undocumented and work in XP only
   they list and (may) fix these networking issues.If /C or /K is specified, then the remainder of the command line is processed as an immediate command in the new shell. Multiple commands separated by the command separator '&' or '&&' are accepted if surrounded by quotes.

引用符 (") 文字を処理するには、次のロジックが使用されます。

  1. 次の条件がすべて満たされる場合、コマンド ライン上の引用符文字は保持されます。
    • /S スイッチなし (引用符を削除)
    • 正確に2つの引用符
    • 2 つの引用符の間には特殊文字は使用できません。特殊文字は次のいずれかです: & < >( ) @ ^ |
    • 2つの引用符の間には1つ以上の空白文字があります
    • 2 つの引用符で囲まれた文字列は実行可能ファイルの名前です。
  2. それ以外の場合、従来の動作では、最初の文字が引用符文字であるかどうかを確認し、そうであれば、先頭の文字を取り除き、コマンド ラインの最後の引用符文字を削除して、最後の引用符文字の後のテキストを保持します。この動作を無効にするには、コマンド ラインの先頭と末尾に二重引用符 "" を使用します。全画面キーの組み合わせ ALT + ENTER は、CMD ウィンドウを全画面モードに切り替えます。通常のウィンドウに戻るには、もう一度 ALT + ENTER を押します。Command.com と CMD.exe これらのページのすべてのコマンドは、32 ビットまたは 64 ビットのコマンド ライン (cmd.exe) を実行していることを前提としています。

古い 16 ビット コマンド プロセッサ command.com は、16 ビット DOS アプリケーションとの下位互換性を提供するために提供されています。Command.com は、cmd.exe と比較すると機能が非常に制限されており、たとえば、多数のコマンドの後に %errorlevel% を設定できません。

バッチ スクリプトに .BAT ではなく .CMD という拡張子を付けて名前を付けると、Windows 95 マシンにコピーしても command.com では実行されません。

%COMSPEC%環境変数はCMD.EXEまたはcommand.comを実行しているかどうかを示します。

.CMD スクリプトと .BAT スクリプト (CMD.EXE で実行) の主な違いの 1 つは、拡張機能が有効になっている場合、PATH/APPEND/PROMPT/SET/ASSOC などのコマンドが成功した場合、ERRORLEVEL が 0 にリセットされることです。古いスタイルの .BAT ファイルでは、新しいエラーが発生しない限り、ERRORLEVEL は変更されません (ソース)。64 ビット バージョンの Windows では、32 ビットの CMD.exe は %windir%\SysWoW64\cmd.exe にあります。互換性の問題を軽減するために、WOW64 サブシステムは、レジストリ呼び出しと一部のファイル システム呼び出しをリダイレクトすることで、32 ビット バイナリを 64 ビット バイナリから分離します。 Windows エクスプローラーから CMD を開く スタート、実行、cmd、OK を選択して新しい CMD プロンプトを開くことができます。レジストリ キー: ;コマンド プロンプトで UNC パスを許可する [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor] "DisableUNCCheck"=dword:00000001

; CMD.exe の起動時にコマンドを実行する [HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor] "AutoRun"=-

; 自動補完を有効にする [HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor] "CompletionChar"=0x9

; Windows 7 の場合: ファイル システム フォルダーのコンテキスト メニューに、管理者特権の [ここで CMD プロンプトを開く (管理者)] オプションを追加します: [HKEY_CLASSES_ROOT\Directory\shell\runas]@="ここで CMD プロンプトを開く (管理者)" [HKEY_CLASSES_ROOT\Directory\shell\runas\command] @="cmd.exe /k pushd %L"

; Windows 7 の場合: ; マイ コンピューターのコンテキスト メニューに、管理者特権の「ここで CMD プロンプトを開く (管理者)」オプションを追加します: [HKEY_CLASSES_ROOT\CLSID{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\runas] @="ここで CMD プロンプトを開く (管理者)" [HKEY_CLASSES_ROOT\CLSID{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\runas\command] @="cmd.exe"以前のコマンドの履歴 上矢印を押すと、コマンド プロンプトで以前に入力したコマンドが一覧表示されます。他の DOSKEY ファンクション キーはデフォルトでロードされます (F7、F8、F9) コピーと貼り付け / クイック編集 コマンド プロンプトでの切り取りと貼り付けの使用を簡素化するには、次のようにしてクイック編集モードを有効にします。 現在の cmd ウィンドウの左上にあるコントロール メニューをアクティブにし、プロパティ、オプション タブに移動して、クイック編集モードにチェックマークを付けます。 これで、マウスでテキストを選択し、Enter (または右クリック) を押すとクリップボードにコピーできます。 Control+V (または右クリック) を使用するか、メニューから任意の場所に貼り付けます。 Esc を押すと選択がキャンセルされ、編集モードに戻ります。 ウィンドウ間でコピーする場合、ウィンドウを選択するには 1 回目のクリックが必要になり、貼り付けるには 2 回目のクリックが必要になることがあります。 コマンド ラインまたはバッチ スクリプトで CMD.exe の複数のインスタンスを実行する CMD は、同じウィンドウに表示される CMD.exe の新しいインスタンスを開始します。 EXIT コマンドは、2 番目の CMD インスタンスを閉じて、前のシェルに戻ります。

あるバッチスクリプトを別のバッチスクリプトから呼び出す方法は、CMD /c C:\docs\myscript.cmdのようなコマンドを実行することです。

CMD の出力はテキスト ファイルにリダイレクトできます。CMD /c が使用されている場合は、EXIT コマンドは不要であることに注意してください。

環境変数 %CMDCMDLINE% は、CMD.EXE に渡される元のコマンド ラインに展開されます。CMD.exe のネイティブ バージョンは常に %windir%\system32 にあります。64 ビット オペレーティング システムでは、%windir%\SysWOW64 に 32 ビットの CMD.exe もあります。

バッチ スクリプトの一時停止または停止 バッチ スクリプトの実行は、CTRL-S を押すことで一時停止できます。これは、DIR リストなどの単一のコマンドを一時停止する場合にも機能します。任意のキーを押すと、操作が再開されます。

バッチスクリプトの実行は、CTRL-Cを押すことで停止できます。

あるバッチ ファイルが別のバッチ ファイルを呼び出す場合、CTRL-C は両方のバッチ スクリプトを終了します。CMD /c を使用して別のバッチ ファイルから 1 つのバッチ ファイルを呼び出す場合、CTRL-C はバッチ スクリプトの 1 つだけを終了します。(EXIT も参照)

長いコマンドと長いファイル名 Windows XP では、CMD コマンド ラインは 8,191 文字に制限されています。すべてのバージョンの Windows、NTFS、FAT では、最大 260 文字のパス名が許可されます。

パス名の長さが制限されている場合の回避策は、\?\ をプレフィックスとして付けることです。
例:
\?\C:\TEMP\Long_Directory\Long_Filename.txt
ErrorLevel
CMD /C はエラーレベルを返します。例: ドライブ Z: が存在しない CMD /c dir Z: は、呼び出し元の CMD シェルに %errorlevel% = 1 を返します。
コマンド拡張機能
CMD.exe の機能の多くは無効にできます。これはすべての内部コマンドに影響します。コマンド拡張機能はデフォルトで有効になっています。これは、レジストリの値を設定することによって制御されます: HKCU\Software\Microsoft\Command Processor\EnableExtensions または、Win XP では、CMD /e:on または CMD /e:off を実行できます。
例:
プログラムを実行し、ファイル名パラメータを渡す:
CMD /c write.exe c:\docs\sample.txt
プログラムを実行し、長いファイル名を渡す:
CMD /c write.exe "c:\sample documents\sample.txt"
プログラム パスにスペースがある:
CMD /c ""c:\Program Files\Microsoft Office\Office\Winword.exe""
プログラム パスにスペース + パラメータがある:
CMD /c ""c:\Program Files\demo.cmd"" パラメータ 1 パラメータ 2
プログラム パスにスペース + スペースを含むパラメータがある:
CMD /k ""c:\batch files\demo.cmd" "スペースを含むパラメータ 1" "スペースを含むパラメータ 2""
Demo1 を起動してから Demo2 を起動する:
CMD /c ""c:\Program Files\demo1.cmd" & "c:\Program Files\demo2.cmd""
「自分自身を統率できる者は、他人を統率できる」 - ハズリット

関連している:

EXIT - CMD シェルを閉じて戻るために使用します。CALL
- あるバッチ プログラムを別のバッチ プログラムから呼び出します。START
- プログラム、コマンド、またはバッチ ファイルを実行します。DOSKEY
コマンド ラインを編集し、コマンドを呼び出します。Q156276
- Cmd は現在のディレクトリとして UNC 名をサポートしていません
。Powershell: Powershell で CMD シェルを実行できます。Exit は PS プロンプトに戻ります。
同等の bash コマンド (Linux): bash - bash シェル (csh、ksh、sh も) を実行します。

関連情報