CMDをsetupEnv.batを呼び出し、呼び出した後、それはPowerShellですべての環境変数の設定を維持しますか?
PowerShellから呼び出されたレガシーコマンドはすべて、別の(子)プロセスで実行されます。
証明:
wmic process where "name='powershell.exe' or name='cmd.exe'" get CommandLine, name, ParentProcessId, ProcessId /Value
は、例えば、あなたのバッチファイルに線の上に追加します。 setupEnv.bat
に電話し、それをpowershellから呼び出します。
D:\bat\setupEnv.bat
、
- または呼び出し
&
call operator& D:\bat\setupEnv.bat
、
- 又は
.
dot sourced& D:\bat\setupEnv.bat
、
- または変更のすべて上記の方法を用いて
cmd
cmd /D /C D:\bat\setupEnv.bat
、又は
& cmd /D /C D:\bat\setupEnv.bat
、又は
. cmd /D /C D:\bat\setupEnv.bat
結果は、少なくとも非常に似常に同じであるか:
PS D:\PShell> D:\bat\setupEnv.bat
"Setup Completed"
CommandLine="C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
Name=powershell.exe
ParentProcessId=4280
ProcessId=6396
CommandLine=C:\Windows\system32\cmd.exe /c ""D:\bat\setupEnv.bat""
Name=cmd.exe
ParentProcessId=6396
ProcessId=4116
がthis Foredecker's answer to similar questionから言い換え:
子プロセスが現在の環境変数を継承することができますが、 作業を子プロセスが親procに戻ることができる方法はありません親の環境を に変更してください。
ソリューション:cmd
/バッチスクリプトからではなくvice versa
バッチファイルで設定された変数は、プロセスが終了すると消えます。 –