批处理文件的CD命令在PowerShell中无法持久生效的原因与解决方法
批处理脚本在PowerShell与CMD中路径行为差异的原因及实现需求的方法
原因分析
- CMD执行
.bat脚本时,直接在当前CMD进程内运行命令,cd命令会直接修改当前进程的工作目录,脚本结束后自然停留在修改后的路径。 - PowerShell执行
.bat脚本时,会启动独立的CMD子进程来运行脚本,子进程内的cd仅修改自身的工作目录,子进程退出后,控制权回到原PowerShell进程,路径不会改变。
实现方法(在PowerShell中运行后停留在C:\)
有三种可选方案,按需选择:
直接在PowerShell中执行命令
无需批处理脚本,直接在PowerShell中运行:cd C:\ pause此命令直接修改当前PowerShell进程的工作目录,执行后会停留在C:\。
在当前PowerShell进程中解析执行批处理内容
若要保留批处理文件,可将脚本内容读取到当前PowerShell进程执行:Invoke-Expression (Get-Content -Path .\你的脚本文件名.bat -Raw)这种方式会让批处理里的
cd命令直接作用于当前PowerShell进程,实现路径修改。调用CMD并保持窗口运行
若希望通过CMD环境执行并保留窗口,可运行:cmd /k "cd C:\ & pause"此命令会启动CMD窗口执行命令,执行后停留在C:\路径的CMD窗口中。
内容的提问来源于stack exchange,提问作者sunny
相关产品推荐
相关产品推荐

