web-dev-qa-db-ja.com

自動実行があるように、cmd.exeの自動終了はありますか?

Windowsでは、レジストリキーHKEY_CURRENT_USER\Software\Microsoft\Command Processorに値autorunを作成し、それをecho Hello from autorunに設定すると、cmd.exeを呼び出すと、最初にその行が実行されます。

Cmd.exeを閉じるときに実行する同等のautoexitのような値はありますか?

autoexit, autoclose, autoquit, exit, onexit, onquitquitを試しましたが運がありませんでした。

私が達成したいのは、(架空の)autoexitレジストリ値をcmd.exeに設定して、setx _LAST_DIR "%cd%"の終了時に現在のディレクトリを保存することです。これにより、次の呼び出しでそれを呼び出すことができます。 cd "%_LAST_DIR%"またはCommand Prompt Last Dir.lnk入力ボックスがStart inに設定された%_LAST_DIR%ファイル内。

私の現在の解決策は、バッチファイルをPATHmyexit.cmdに置くことです。

@setx _LAST_DIR "%CD%"
@exit

ディレクトリを保存したい場合は、exitではなく呼び出すことを忘れないでください。

2
Henrik Jensen

あなたがやろうとしていることは、実際にはあなたが求めていることを必要とせず、提供された回避策では機能しないので、これを2つの部分に分けました。

最後に使用したディレクトリを環境変数に保存する

次のバッチファイルを作成します。

@CD /D %*
@>nul setx _LAST_DIR "%CD%"

AutoRunを次のように設定します。

CD /D %_LAST_DIR%&doskey cd=@ECHO off$T<FILENAME> $*$T@ECHO on

ここで、<FILENAME>は、作成したバッチファイルへのフルパスです。または、PATH変数にリストされているディレクトリにバッチファイルを作成して、ファイル名だけを使用できるようにします。

内訳:

  • これは、&文字で区切られた複数のコマンドであり、コマンドを順番に実行できます。
  • CD /D %_LAST_DIR%は、ディレクトリを_LAST_DIR環境変数の内容に変更します。 /Dスイッチは、別のドライブ上のディレクトリに変更できるようにするために使用されます。
  • doskey cd=@ECHO off$T<FILENAME> $*$T@ECHO onは、いくつかのことを行うDOSKEYマクロを作成します。
    • doskey cd=は、デフォルトのCDコマンドを置き換えるマクロを作成します
    • $TDOSKEYと同等の&であり、複数のコマンドを区切るために使用されます。 $*%*と同等のDOSKEYであり、マクロに渡されるすべての引数を保持します。
    • マクロは、煩雑さを軽減するためにECHOをオフにし、ディレクトリを変更し、環境変数を設定してから、ECHOをオンに戻します。
    • DOSKEYマクロ内でバッチファイルを使用しているため、%CD%変数を使用して、完全なディレクトリパスを指定し、エラーを説明できます。

さらに読む:

自動終了

この部分はあなたが望むことをしませんが、同様の検索用語を使用している他の人はそれが役に立つと思うかもしれません。

私の知る限り、このオプションは存在せず、 Microsoftのドキュメント には記載されていません。これが潜在的な回避策です。

警告:コマンドプロンプトの無限ループが開始される可能性があるため、理解できない場合はこのコードを使用しないでください。これは、あらゆる種類の実稼働環境で使用する前に、徹底的にテストする必要があります。

次のコードを使用してバッチファイルを作成し、AutoRunとして設定します。

@cls
@cmd /d
<exit commands here>
@exit

内訳:

  • すでにご存知のように、各行の先頭にある@文字は、コマンド自体を非表示にし、出力のみを表示します。これは、混乱を減らすためです。
  • clsは、Windowsのバージョンと著作権情報を含むヘッダーをクリアします。 両方のコンソールからクリアしたい場合は、次のコマンドをcmd /d /kに置き換えることができます。
  • @cmd /dは、このコマンド内で新しい(子)コマンドプロンプトを開始し、選択したコマンドを実行できるように開いたままにします。 /Dスイッチは、コマンドプロンプトnotに自動実行を使用するように指示します。
  • 子コマンドプロンプトが終了すると、このバッチファイルの実行が続行されます。
  • <exit commands here>は、実行したいコマンドに置き換える必要があります。これにより、子コマンドPromptにローカルな環境変数または変数の変更にアクセスできなくなります。 SETXでさえ、将来のコマンドプロンプトにのみ適用され、親コマンドプロンプトに戻されることはありません。

注:コマンドプロンプトが異常終了した場合(ウィンドウの赤いXをクリックするか、タスクマネージャーでタスクを終了した場合)、コマンドは実行されません。終了コマンド。

さらに読む:

1
Worthwelle