创建cmd /批处理脚本(例如parent.bat
)时,可以使用'来电'命令调用另一个批处理文件(例如child.bat
)。 child.bat
中的说明将作为parent.bat
的一部分运行。
parent.bat
将使用的任何变量,child.bat
都可以使用,反之亦然。
是否可以在PowerShell中将变量从parent.ps1
传递到child.ps1
,反之亦然?
答案 0 :(得分:1)
在另一个脚本内部调用的PowerShell脚本可以访问父脚本的变量,但任何修改都会丢失,因为它们保存在本地范围内(阅读更多about scopes here)。
Parent.ps1
$MyVariable = "Foo"
Write-Host "PARENT BEFORE: MyVariable: $MyVariable"
& "$PSScriptRoot\Child.ps1"
Write-Host "PARENT AFTER: MyVariable: $MyVariable"
Child.ps1
Write-Host "CHILD BEFORE: MyVariable: $MyVariable"
$MyVariable = "Bar"
Write-Host "CHILD AFTER: MyVariable: $MyVariable"
输出:
PS > .\Parent.ps1
PARENT BEFORE: MyVariable: Foo
CHILD BEFORE: MyVariable: Foo
CHILD AFTER: MyVariable: Bar
PARENT AFTER: MyVariable: Foo
如果使用dot-sourcing(.
)来调用子脚本,它将在父脚本的Scope中运行,这将使子脚本中的变量修改对父项可见。例如:
Parent.ps1
$MyVariable = "Foo"
Write-Host "PARENT BEFORE: MyVariable: $MyVariable"
. "$PSScriptRoot\Child.ps1"
Write-Host "PARENT AFTER: MyVariable: $MyVariable"
输出:
PARENT BEFORE: MyVariable: Foo
CHILD BEFORE: MyVariable: Foo
CHILD AFTER: MyVariable: Bar
PARENT AFTER: MyVariable: Bar