Powershell 中的批处理 setlocal 模拟

batch setlocal analogue in Powershell

想象一下,我们有这样一个批处理脚本

@echo off
setlocal
cd C:\Users\user\Work\SomeWorkingDirectory
endlocal

所以,如果这样的脚本将被启动,例如,从C:\Users\user\,那么脚本执行后终端中的当前目录仍然是C:\Users\user,而不是C:\Users\user\Work\SomeWorkingDirectory

所以,问题是:Powershell 中是否有任何 setlocal / endlocal 类似物? Google 了一下,没找到。

PowerShell 的作用域规则与 WinBatch 的不同。

对于大多数变量,它们只会在定义它们的脚本或函数中可见。可以修改环境变量,例如 $env:Path,但修改只会在 PowerShell 会话期间持续存在。有关持久性更改以及有关环境变量的更多信息,请参阅 about_Environment_Variables

对于路径,正如您似乎在问的那样,您可以使用 Push-Location and Pop-Location cmdlet(默认情况下,别名分别为 pushdpopd)。