批处理文件中的 cd 命令在 Powershell 中不起作用

问题描述 投票:0回答:1

这是我的批处理文件:

CD c:/
PAUSE

在 Windows Powershell 中运行时,我得到以下输出: powershell

程序终止后,我又回到了开始的地方!

同时,在cmd中运行时: cmd

我得到了我想要的行为,程序结束后我仍保留在

C:/
目录中。

为什么会出现这种情况?我怎样才能在 Powershell 中获得这种行为?

powershell batch-file cmd
1个回答
0
投票

那是因为 *.bat 文件是在当前 shell 的环境中执行的,这有点奇怪。大多数其他 shell(包括 PowerShell)中的正确行为是在子 shell 中运行脚本,除非使用显式

source
/
.
命令
。 PowerShell 中的等效项也是 dot source 运算符,因此如果您运行 *.ps1 脚本,则像这样运行

. path\to\your\script.ps1

但是您正在 PowerShell 中运行 *.bat 脚本,因此显然您不能这样做,因为它适用于完全不同的 shell。简而言之:你不能那样做。子 shell 永远无法更改父 shell 的环境,这就是 为什么 cd 始终是所有 shell 中的内置命令

© www.soinside.com 2019 - 2024. All rights reserved.