web-dev-qa-db-ja.com

Windowsバッチファイルで変数をアンロードする理由

Windowsバッチファイルで使用されるnload変数への必要性または良い習慣と見なされますか?
たとえば、次のコードでは、set myFolder=最後に必要ですか?

@echo off
set myFolder="C:\Temp\Batchfiles"
echo %myFolder%

set myFolder=

私はこれをオンラインの多くの場所で見ました、確かに変数はバッチファイルが終了すると自動的にアンロードされますか?

13
ChrisB

SETはグローバル環境変数を設定します。スクリプトの実行後も保持されます。

例を見てみましょう。
最初に、変数をクリアして、存在しないことを確認します。

C:\Users\Oliver\Desktop>set TEST=

簡単なテスト:

C:\Users\Oliver\Desktop>echo %TEST%
%TEST%

そのバッチファイルを作成して実行してみましょう。

C:\Users\Oliver\Desktop>echo set TEST=something>test.bat
C:\Users\Oliver\Desktop>test.bat
C:\Users\Oliver\Desktop>set TEST=something

.batファイルの実行後のTESTの値を見てみましょう。

C:\Users\Oliver\Desktop>echo %TEST%
something

そのため、はい、スクリプトの最後で変数をクリアすることをお勧めします。


問題全体を回避するには、 SETLOCAL および ENDLOCAL を使用することをお勧めします。

ここでは、SETLOCALENDLOCALを使用する新しい.batファイルを作成しました。

C:\Users\Oliver\Desktop>type test.bat
setlocal
set TEST=something
endlocal

TESTをクリアしてエコーし、クリーンな状態で開始できるようにします。

C:\Users\Oliver\Desktop>set TEST=
C:\Users\Oliver\Desktop>echo %TEST%
%TEST%

それでは、新しい.batを実行してみましょう。

C:\Users\Oliver\Desktop>test.bat
C:\Users\Oliver\Desktop>setlocal
C:\Users\Oliver\Desktop>set TEST=something    
C:\Users\Oliver\Desktop>endlocal

これでTESTは空のままになります:

C:\Users\Oliver\Desktop>echo %TEST%
%TEST%
33
Der Hochstapler