在Powershell中设置批处理文件的变量

时间:2017-03-01 15:31:49

标签: powershell batch-file cmd

我有一个名为bar.cmd的批处理文件,其中包含一行:ECHO %Foo% 如何在Powershell脚本中设置Foo,以便在我致电& .\bar.cmd时,它会打印Bar

1 个答案:

答案 0 :(得分:6)

在PowerShell中设置环境变量:

Set-Item Env:foo "bar"

$env:foo = "bar"

如果你想反过来做,请阅读这篇文章:

http://windowsitpro.com/powershell/take-charge-environment-variables-powershell

在PowerShell中运行cmd.exe以执行shell脚本(.bat.cmd文件)时,变量将在cmd.exe的正在运行的实例中设置但丢失当cmd.exe实例终止时。

解决方法:运行cmd.exe shell脚本并输出它设置的所有环境变量,然后在当前的PowerShell会话中设置这些变量。本文提供了一个简短的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
    }
}