10

バッチファイルの実行中に、別のフォルダー( "../asdf"など)に移動するシナリオがあります。実行の最後に、現在の作業ディレクトリを、ユーザーが.batファイルを呼び出した場所と同じフォルダーとして設定します。

ただし、ユーザーがバッチ処理を完了する前に終了すると、cmdは現在の作業ディレクトリ(「../asdf」など)を表示します。

しかし、私の場合、作業ディレクトリをデフォルト/事前定義されたディレクトリに復元する必要があります。出来ますか?

  • バッチファイルは私が書いたものなので、変更できます。
  • CMDは、私が制御できるCMDへのデスクトップショートカットを介して開かれます。そのため、ディレクトリの作業やCMDへの引数の受け渡しなどのプロパティをそこで実行できます。
4

1 に答える 1

29

バッチスクリプトsetlocalで、バッチセッションの実行環境をカプセル化するために使用します。ユーザーがあなたの前に、cdまたはpopd戻る前にスクリプトを終了した場合でも、スクリプトは開始したディレクトリで終了します。簡単なテストは次のとおりです。

@echo off
setlocal
pushd c:\Users
cd
exit /b

出力:

C:\Users\me\Desktop>test.bat
c:\Users

C:\Users\me\Desktop>

popdまたはしなかったことに注意してくださいcd %userprofile%\Desktop。ただし、スクリプトが終了した後も、デスクトップに戻ってしまいました。

さらに、setlocalバッチスクリプト以外の意味を持たない孤立した変数で環境を混乱させないようにします。それは良い習慣です。コンソールで、help setlocal詳細を入力します。

于 2013-03-27T12:53:31.510 に答える