UNIXの世界では、.profileファイルまたは.cshrcファイルを編集する場合、source〜/ .profileまたはsource〜/ .cshrcを実行して、現在のセッションに効果を与えることができます。 Windowsのシステム変数を変更した場合、コマンドプロンプトセッションを終了して別のコマンドプロンプトセッションを開くことなく、現在のコマンドプロンプトセッションにどのように影響を与えることができますか?
私は恐れていませんが、ドットソーシングをサポートしているPowershellの使用を開始できます。 powershellウィンドウは実際にはcmdに基づいているため、すべてのdosコマンドが引き続き機能し、新しいパワー、さらに多くのパワーが得られます。
通常のWindowsコマンドプロンプト(cmd.exeなど)では、call mybat.bat
私が望んだことをした。設定したすべての環境変数を取得しました。
Dos Shellは、実行時に現在の環境で変数を作成する変数への割り当てのみを含む.batファイルをサポートします。
c:> type EnvSetTest.bat
set TESTXYZ=XYZ
c:> .\EnvSetTest.bat
c:> set | find "TESTX"
TESTXYZ=XYZ
c:>
IHTH。
次の例は、問題の解決に役立ちます。
env.bat
このファイルは変数を設定するためのものです。その内容は一撃です。
set name="test3"
test.bat
メインバッチファイル。
call env.bat
call print.bat
pause
今print.bat
変数を出力するバッチファイル。以下の内容
echo %name%
これが機能することがわかった唯一の方法は、独自の構成ウィンドウから新しいcmdウィンドウを起動することです。例えば:
@echo off
echo Loading...
setlocal enabledelayedexpansion
call 1.cmd
call 2.bat
...
...
if "%LocalAppData%"=="" set LocalAppData=%UserProfile%\Local Settings\Application Data
SET BLAHNAME=FILE:%LocalAppData%\BLAH
call blah blah
cmd
最後のcmdは、目的の設定をコマンドウィンドウにエクスポートした新しいcmdプロンプトを起動します。
いくつかの限定的なユースケースのための回避策があります。コマンドのファイルを読み込み、インラインで実行できます。たとえば、呼び出しコマンドファイルは次のようになります。
echo OFF
SETLOCAL ENABLEDELAYEDEXPANSION
:
echo. ----------------
echo. set-up Java
echo. ----------------
echo.
rem call %DEV_SCRIPTS%\setup-Java
for /F "tokens=*" %%A in ( %DEV_SCRIPTS%\setup-Java.bat ) do (
%%A
)
call %DEV_SCRIPTS%\show-Java
:
setup-Java.bat
ファイルでは、%
拡張を使用できません。 !
;を使用する必要があります。例えば。:
set JRE_HOME=!JRE_08!
rem
set JRE_TARGET=!JRE_HOME!
したがって、テキストファイルからsource
- ingコマンドを散らかしていることになります。この方法で、どのコマンドsourcedをテストする必要があります。いくつかの環境変数を設定するために、いくつかの試行を行いました。
コマンドプロセッサが最初にファイルをスキャンするため、ロジックやループを実行できるとは思いません。環境定義などの共有されたものを再利用するための簡単な回避策があれば大丈夫です。他のほとんどのものは、実際のsource
コマンドを必要としません(私は望んでいます)。幸運を。