pushd 命令是 Windows 和 Linux/Unix 系统中命令行界面(如 Windows 的 CMD、PowerShell,以及 Linux 的 Bash)提供的一个实用工具,主要用于管理目录栈(Directory Stack),帮助用户在多个目录之间快速切换,同时保留切换历史,便于后续返回,它的名称由 "push"(压入)和 "d"(directory,目录)组合而成,核心功能是将当前目录压入栈中,并切换到新目录,与 popd
命令(弹出栈顶目录并切换)配合使用,形成高效的目录导航机制,以下从功能、语法、使用场景、实际操作及注意事项等方面详细介绍 pushd
命令。

pushd 命令的基本语法与参数
pushd
命令的基本语法在不同系统中略有差异,但核心结构相似,以 Windows CMD 和 Linux Bash 为例:
基本语法
pushd [目录路径]
常用参数
- 无参数:直接输入
pushd
时,会切换到目录栈顶的目录(即最近一次pushd
压入的目录),并将栈顶目录弹出(相当于popd
的效果,但仅限部分场景,如 Windows CMD 中无参数pushd
会交换栈顶两个目录的位置)。 - 目录路径:指定要切换的目标目录,命令会将当前目录压入栈中,然后切换到目标目录。
+n
(部分系统支持,如 PowerShell):表示切换到目录栈中从 0 开始的第 n 个目录(0 为栈顶),不改变栈内容,仅切换当前目录。-n
(部分系统支持):表示交换栈顶和第 n 个目录的位置,用于调整栈中目录的顺序。
目录栈的查看
配合 dirs
命令可以查看当前目录栈的内容。
dirs
输出结果中,左侧带 的为当前目录,栈顶在右侧(如 Windows 中栈顶是最后压入的目录,Linux 中栈顶是最左侧)。
pushd 命令的工作原理与核心功能
pushd
的核心是维护一个“后进先出”(LIFO)的目录栈,每次执行 pushd [目录]
时,系统会完成两步操作:

- 压入当前目录:将当前工作目录保存到栈顶。
- 切换到目标目录:将当前工作目录切换为指定的目录路径。
当前在 C:\Users
目录,执行 pushd D:\Projects
后:
- 目录栈变为:
C:\Users
(栈底) →D:\Projects
(栈顶) - 当前工作目录切换为
D:\Projects
。
此时若执行 pushd E:\Documents
,栈会继续压入 D:\Projects
,栈顶变为 E:\Documents
,当前目录切换到 E:\Documents
,通过多次 pushd
,可以快速在多个目录间切换,而无需记住每个目录的完整路径。
pushd 与 popd 的协同使用
pushd
通常与 popd
配合使用,形成“压入-弹出”的导航循环。popd
命令的功能是从目录栈中弹出栈顶目录,并切换到该目录。
- 初始状态:当前目录
C:\Users
,栈为空。 - 执行
pushd D:\Projects
:栈变为C:\Users
→D:\Projects
,当前目录D:\Projects
。 - 执行
pushd E:\Documents
:栈变为C:\Users
→D:\Projects
→E:\Documents
,当前目录E:\Documents
。 - 执行
popd
:弹出E:\Documents
,栈变为C:\Users
→D:\Projects
,当前目录切换为D:\Projects
。 - 再次执行
popd
:弹出D:\Projects
,栈变为C:\Users
,当前目录切换为C:\Users
。
通过这种机制,用户可以轻松实现“深入”子目录和“返回”上级目录的操作,尤其适合在多层嵌套目录中频繁切换的场景(如开发项目时在不同模块目录间切换)。

pushd 的实际应用场景
多项目开发时的目录切换
开发人员常需在多个项目目录间切换,
# 初始在项目根目录 D:\Dev\ProjectA pushd D:\Dev\ProjectB # 切换到 ProjectB,栈中保存 ProjectA pushd D:\Dev\ProjectC # 切换到 ProjectC,栈中保存 ProjectA、ProjectB # ... 在 ProjectC 中操作 popd # 返回 ProjectB popd # 返回 ProjectA
批量处理文件时的路径管理
当需要在多个目录中执行相同操作(如复制文件、编译代码)时,pushd
可避免重复输入路径:
# 初始在 D:\Files pushd D:\Files\Sub1 # 进入 Sub1,栈保存 D:\Files # 执行操作:copy *.txt D:\Backup popd # 返回 D:\Files pushd D:\Files\Sub2 # 进入 Sub2,栈保存 D:\Files # 执行相同操作 popd # 返回 D:\Files
跨驱动器切换时的路径记忆
在 Windows 中,pushd
甚至可以跨驱动器使用,当前在 C:\Windows
,执行 pushd D:
,系统会自动将 C:\Windows
压入栈,并切换到 D:\
(驱动器根目录),此时通过 popd
可返回原驱动器和目录。
pushd 在不同系统中的差异
Windows CMD 与 PowerShell
- Windows CMD:无参数
pushd
会交换栈顶两个目录的位置(需栈中至少有两个目录),例如栈为A B C
(C 为栈顶),执行pushd
后栈变为A C B
,当前目录切换为B
。 - PowerShell:
pushd
是Push-Location
的别名,功能更强大,支持-StackName
参数管理多个目录栈(如pushd -StackName "Work" D:\Projects
创建名为 "Work" 的独立栈)。
Linux/Unix Bash
- Linux Bash:
pushd
无参数时直接切换到栈顶目录(不弹出),例如栈为A B C
(C 为栈顶),执行pushd
后当前目录变为C
不变。 - 参数支持:
pushd +1
切换到栈中第二个目录(从 0 开始),pushd -1
交换栈顶和倒数第二个目录。
路径分隔符差异
- Windows 使用反斜杠
\
(如D:\Projects
),Linux/Unix 使用正斜杠 (如/home/user/docs
),但pushd
会自动适配系统路径格式。
使用注意事项
- 栈的深度限制:目录栈的默认深度因系统而异(通常为 32 或 128),超出限制后需使用
popd
清理。 - 相对路径与绝对路径:
pushd
支持相对路径(如pushd ../parent
),但推荐使用绝对路径以避免混淆。 - 空栈处理:若栈为空时执行
popd
,系统会报错(如 "No directories in stack"),需先通过pushd
压入目录。 - 脚本中的使用:在自动化脚本中,建议配合
dirs
检查栈状态,避免因栈空导致的错误。
pushd 与 cd 的对比
特性 | cd |
pushd |
---|---|---|
功能 | 仅切换当前目录 | 切换目录并保存历史到栈 |
历史记录 | 无 | 通过目录栈维护 |
返回方式 | 需手动输入原目录路径 | 通过 popd 快速返回 |
适用场景 | 简单目录切换 | 多层、频繁目录切换 |
跨驱动器支持 | Windows 中需指定完整路径 | 自动保存原路径,支持跨驱动器切换 |
相关问答FAQs
Q1:pushd 和 cd 有什么区别?什么时候应该用 pushd 而不是 cd?
A:cd
仅用于切换当前目录,不保留历史路径,每次返回需手动输入原目录路径;pushd
在切换目录时会将原路径压入栈中,可通过 popd
快速返回,适合需要频繁在多个目录间切换的场景(如开发项目、批量文件处理),当需要在“深入”子目录后能轻松“返回”原目录时,pushd
比 cd
更高效。
Q2:目录栈满了怎么办?如何清空目录栈?
A:目录栈的默认深度通常为 32 或 128(因系统而异),若栈满,可通过以下方式处理:
- 手动清理:重复执行
popd
直至栈为空(如popd
32 次清空 32 层栈)。 - 重置栈:部分系统(如 PowerShell)支持
clear-locationstack
命令清空栈;Linux 中可通过dirs -c
清空栈内容(但需注意dirs -c
是 Bash 的扩展功能,并非所有系统支持)。
建议在脚本中检查栈深度(如dirs | wc -w
),避免因栈满导致操作失败。