这是我的批处理文件:
CD c:/
PAUSE
在 Windows Powershell 中运行时,我得到以下输出: powershell
程序终止后,我又回到了开始的地方!
同时,在cmd中运行时: cmd
我得到了我想要的行为,程序结束后我仍保留在
C:/
目录中。
为什么会出现这种情况?我怎样才能在 Powershell 中获得这种行为?
那是因为 *.bat 文件是在当前 shell 的环境中执行的,这有点奇怪。大多数其他 shell(包括 PowerShell)中的正确行为是在子 shell 中运行脚本,除非使用显式
source
/.
命令。 PowerShell 中的等效项也是 dot source 运算符,因此如果您运行 *.ps1 脚本,则像这样运行
. path\to\your\script.ps1
但是您正在 PowerShell 中运行 *.bat 脚本,因此显然您不能这样做,因为它适用于完全不同的 shell。简而言之:你不能那样做。子 shell 永远无法更改父 shell 的环境,这就是 为什么 cd 始终是所有 shell 中的内置命令