PowerShell 中的源 .bat 文件脚本变量
Source .bat file script variables in PowerShell
我正在 PowerShell 中寻找一种方法,将环境变量从 运行ning 一个 .bat 文件脚本导入到 Env: 提供程序中。
是否有等效于 twa_env.cmd 的工具可以在 PowerShell 中正确设置 TWS 环境?
我可以启动 cmd.exe shell、CALL twa_env.cmd,然后启动 PowerShell。这似乎有效。我还不能做的是启动 PowerShell shell、运行 twa_env.cmd,并将新的变量设置带回 PowerShell Env:.
PowerShell 可以 运行 cmd.exe
shell 脚本(批处理文件),但它(自然地)必须使用 cmd.exe
来执行它。问题是当 cmd.exe
可执行文件关闭时,它设置的环境变量不会传播到调用 PowerShell 会话。
解决方法是 "capture" 在 cmd.exe
会话中设置的环境变量,并在批处理文件完成后手动将它们传播到 PowerShell。以下 Invoke-CmdScript
PowerShell 函数可以为您做到这一点:
# Invokes a Cmd.exe shell script and updates the environment.
function Invoke-CmdScript {
param(
[String] $scriptName
)
$cmdLine = """$scriptName"" $args & set"
& $Env:SystemRoot\system32\cmd.exe /c $cmdLine |
Select-String '^([^=]*)=(.*)$' |
ForEach-Object {
$varName = $_.Matches[0].Groups[1].Value
$varValue = $_.Matches[0].Groups[2].Value
Set-Item Env:$varName $varValue
}
}
我正在 PowerShell 中寻找一种方法,将环境变量从 运行ning 一个 .bat 文件脚本导入到 Env: 提供程序中。
是否有等效于 twa_env.cmd 的工具可以在 PowerShell 中正确设置 TWS 环境?
我可以启动 cmd.exe shell、CALL twa_env.cmd,然后启动 PowerShell。这似乎有效。我还不能做的是启动 PowerShell shell、运行 twa_env.cmd,并将新的变量设置带回 PowerShell Env:.
PowerShell 可以 运行 cmd.exe
shell 脚本(批处理文件),但它(自然地)必须使用 cmd.exe
来执行它。问题是当 cmd.exe
可执行文件关闭时,它设置的环境变量不会传播到调用 PowerShell 会话。
解决方法是 "capture" 在 cmd.exe
会话中设置的环境变量,并在批处理文件完成后手动将它们传播到 PowerShell。以下 Invoke-CmdScript
PowerShell 函数可以为您做到这一点:
# Invokes a Cmd.exe shell script and updates the environment.
function Invoke-CmdScript {
param(
[String] $scriptName
)
$cmdLine = """$scriptName"" $args & set"
& $Env:SystemRoot\system32\cmd.exe /c $cmdLine |
Select-String '^([^=]*)=(.*)$' |
ForEach-Object {
$varName = $_.Matches[0].Groups[1].Value
$varValue = $_.Matches[0].Groups[2].Value
Set-Item Env:$varName $varValue
}
}