Split-Path / Join-Path 是什么
这两个命令是 PowerShell 里处理路径的标准工具:Split-Path 把一个路径拆出父目录、叶节点(文件名或末级目录),Join-Path 把父路径与子名安全地拼成一个路径。它们比用字符串截取与手工拼反斜杠可靠,能自动处理分隔符重复、相对路径与常见边界情况,是写自动化脚本时最该养成的习惯。
基本信息
| 适用平台 | Windows PowerShell 5.1 与 PowerShell 7 通用 |
|---|---|
| 语法 | Split-Path <路径> -Parent|-Leaf|-Extension;Join-Path <父> <子> |
| 常用参数 | -Resolve 检查路径存在并解析、-NoQualifier 去掉驱动器前缀 |
| 配套方法 | [IO.Path]::GetFileNameWithoutExtension() 等 .NET 路径方法 |
| 返回值 | 字符串,可继续参与管道与拼接 |
| 相关命令 | Test-Path、Resolve-Path、Convert-Path |
典型使用场景
- 从完整文件路径里取出所在目录,用于定位同目录下的配置
- 取文件名或扩展名,按类型分流处理
- 在脚本里安全拼接输出路径,避免出现双反斜杠
- 批量处理时构造目标路径,保证跨盘符与相对路径都正确
- 判断路径是否已存在后再决定是否创建
常用示例
常用示例
Split-Path D:\Web\site\index.html -Parent # 取父目录 D:\Web\site
Split-Path D:\Web\site\index.html -Leaf # 取叶节点 index.html
Split-Path D:\Web\site\index.html -Extension # 取扩展名 .html
Join-Path D:\Web 'site\css' # 自动补一个分隔符,结果不会出现双斜杠
Join-Path (Split-Path $PSCommandPath -Parent) 'config.json' # 脚本自身目录下的配置文件
[IO.Path]::GetFileNameWithoutExtension('D:\a\b.log') # 取不带扩展名的文件名
Test-Path (Join-Path $env:ProgramData 'MyApp') # 拼完先判断存在性常用参数读法
| 参数 | 作用 | 注意点 |
|---|---|---|
| -Parent | 取上级目录 | 根目录再取父级仍返回根目录 |
| -Leaf | 取末级元素 | 目录路径也能取到目录名 |
| -Extension | 取扩展名 | 无扩展名时返回空字符串 |
| -Resolve | 解析并验证存在 | 路径不存在会报错,需配合 -ErrorAction |
| -NoQualifier | 去掉盘符或提供程序前缀 | 做相对路径展示时有用 |
路径里含通配符字符(比如文件名里真有 [ ])时,Split-Path 在部分版本会按通配处理导致报错,此时用 -LiteralPath 参数绕过。
拼接目录时不要在子路径末尾留反斜杠,也不要手工在父路径后面补一个:Join-Path 已经负责分隔符,重复补只会得到双斜杠这种看起来奇怪但多数场景仍能用的路径。