これを行うには、PUSHD/POPDが望ましい方法です。しかしSETLOCAL/ENDLOCALには(SETLOCAL以外のものに加えて)同じことを実現する(文書化されていない?)機能があります。
SETLOCALの後にディレクトリを変更すると、ENDLOCALの元のディレクトリに戻ります。 がであることをSETLOCALと
cd OriginalLocation
setlocal
cd NewLocation
endlocal
rem we are back to OriginalLocation
もうひとつは、文書化 - どれというバッチ内のSETLOCALか:ラベルルーチンは、バッチまたはルーチンを出る際に、暗黙的なENDLOCALで終了します。暗黙のENDLOCALは、明示的なENDLOCALとして、元のフォルダーに戻ります。
cd OriginalLocation
call :ChangeLocation
rem - We are back to OriginalLocation because :ChangeLocation did CD after a SETLOCAL
rem - and there is an implicit ENDLOCAL upon return
exit /b
:ChangeLocation
setlocal
cd NewLocation
exit /b
PUSHD/POPDの代わりにSETLOCAL/ENDLOCALを使用することはお勧めしません。しかし、それはあなたが知っておくべき行動です。ジョニーさんのコメント
PUSHD/POPDとSETLOCAL/ENDLOCALが組み合わされたとき、それは混乱得ることができますへ
レスポンス。
setlocal
cd test
@cd
pushd new
@cd
endlocal
@cd
popd
@cd
--OUTPUT--
D:\test>setlocal
D:\test>cd test
D:\test\test
D:\test\test>pushd new
D:\test\test\new
D:\test\test\new>endlocal
D:\test
D:\test>popd
D:\test\test
+1:さらにPUSHDがCDにするために使用されるENDLOCALは、以下によって証明されるようにないクリアPUSHDスタックを行いネットワークに接続されたドライブは、CDには許可されていません。 – Mechaflash
1年前に私がバッチを使用していたときにそのコメントがあったのですが、ネットワークドライブを回避する必要がありましたか? +100もしできれば – WernerCD