首页/系统/Windows 运维速查/pushd / popd 目录栈切换
CMD 常用命令74 条

pushd / popd 目录栈切换

保存当前目录并切换、用完弹回:支持嵌套使用与 UNC 路径自动映射盘符,是批处理里最安全的目录切换方式。

Windows 运维速查系统更新于 2026-10-13

pushd / popd 是什么

pushd 把当前目录压栈再切到目标目录,popd 从栈里弹出并回到上一个目录,两者成对使用。它比 cd 多了一层“记得来路”,脚本里只要配对写,就不会因为中途改了目录而在错误位置执行后续命令。它还解决一个 cmd 的老毛病:cmd 默认不允许把 UNC 路径设为当前目录,而 pushd 会自动分配一个临时盘符,让 UNC 变成可用的工作目录。

基本信息

适用平台Windows 命令提示符(cmd);批处理脚本内可用
语法pushd 路径 … popd
栈特性可嵌套,多次 pushd 后按后进先出顺序 popd 回来
UNC 优势pushd \\server\share 自动映射临时盘符,popd 后释放
PowerShell 对应Push-Location / Pop-Location(-StackName 可命名多栈)
查看栈内容PowerShell 里 Get-Location -Stack 可打印当前栈

典型使用场景

  • 批处理里临时切目录执行编译、打包,结束后回到调用者的目录
  • 脚本骨架用 pushd %~dp0 保证无论从哪里调用都在脚本自身目录执行
  • 需要访问 UNC 共享目录且命令要求本地路径时绕开限制
  • 嵌套调用多个子脚本,每层各自切换与返回,互不干扰
  • 临时盘符映射用完自动释放,不必手工 net use 清理

常用示例

常用示例
pushd D:\Project                    # 保存当前目录并切到 D:\Project
build.cmd                            # 在当前目录执行构建
popd                                 # 弹回原目录
pushd \\nas01\share\deploy           # UNC 场景:自动映射临时盘符
copy app.zip .                       # 此时当前目录就是共享目录
popd                                 # 返回并释放临时盘符
pushd %~dp0                          # 脚本里固定回到脚本自身目录

常见返回与现象

现象含义处理
找不到指定的路径目标路径不存在或拼写错误先确认路径,注意 UNC 双反斜杠
UNC 不可用未用 pushd 而直接 cd 到共享改用 pushd 让其分配临时盘符
脚本后续目录不对pushd 与 popd 未配对检查提前 return 或 goto 跳过的分支
临时盘符冲突已有同名映射占用该盘符清理旧的 net use 映射后重试
脚本里最实用的骨架就是在开头写 pushd %~dp0、结尾写 popd:%~dp0 恒为脚本自身所在目录,这样双击运行、计划任务调用、被别人从任意目录调用,行为都一致。
pushd 自动分配的盘符是本次命令解释器会话内的临时映射,popd 之后立即释放;它不会出现在其他窗口,也不需要手工清理。

易错点

  • pushd 与 popd 数量不等,后面的命令会在错误目录里执行,这类脚本 bug 往往在很晚才暴露
  • 脚本中途用 exit /b 或 goto 提前返回而跳过了 popd,导致栈不平衡
  • 把 pushd 的临时盘符当成持久映射,在其他窗口里引用同一个盘符会找不到
  • 在 PowerShell 里照抄 pushd 却写成 cmd 语法,注意 PowerShell 中的对应命令是 Push-Location / Pop-Location

数据来源与参考

  • Microsoft Learn:pushd 命令
  • Microsoft Learn:popd 命令

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌