3

次のバッチ スクリプトを使用して、Java コマンド ライン ツールを実行しています。

@echo off
pushd %~dp0
setLocal EnableDelayedExpansion
set CLASSPATH="
for /R ./libs %%a in (*.jar) do (
    set CLASSPATH=!CLASSPATH!;%%a
)
set CLASSPATH=!CLASSPATH!"
java -cp !CLASSPATH! com.example.CLIApplication %*
popd

ツールのディレクトリをシステム変数 PATH に追加して、コマンド プロンプト経由で任意のディレクトリからツールを実行できるようにしました。これは機能していますが、私が見ている問題は次のとおりです。

ツールのディレクトリは C:\tool\ です ユーザーは C:\ にいます バッチ ファイルの実行後、ユーザーは C:\ ではなく C:\tool\ に残ります

popd が呼び出されますが、コンソールは C:\ にとどまらず、C:\to\ に戻ります。

スクリプトの終了後にユーザー ディレクトリが変更されないようにするにはどうすればよいですか?

4

2 に答える 2

5

endlocal を使用setlocalしないと、ここでこの問題が発生します。

endlocalを呼び出す直前にを追加するだけpopdです。

コードでpopdは最初のディレクトリに戻りますが、setlocal はすべての変数を格納し、開いているすべての setlocals はバッチが終了すると暗黙的な endlocals によって閉じられるため、cd 変数も復元されます。

于 2013-09-19T07:12:51.807 に答える