如何在PowerShell中从文件路径捕获文件名上级的子文件夹名称
提取文件路径的上级/上两级文件夹名称
下面针对不同脚本语言给出直接可用的实现方案,满足你循环处理文件时提取目标文件夹名称的需求:
PowerShell 实现
利用PowerShell的文件对象属性可以直接获取层级目录:
单个路径处理
$filePath = "C:\Users\Bandit\AppData\Local\Temp\9c86ee608bb9477ebb11914c36a5a76d\638110173610123239\IDUDatabase_4.0.0.119\IDUDatabase\test.sql" # 获取直接上级文件夹(结果:IDUDatabase) $parentFolder = (Get-Item $filePath).Directory.Name # 获取上两级文件夹(结果:IDUDatabase_4.0.0.119) $grandParentFolder = (Get-Item $filePath).Directory.Parent.Name
循环处理文件
# 遍历指定目录下所有.sql文件(可修改过滤规则) Get-ChildItem -Path "C:\你的目标目录路径" -Filter "*.sql" -Recurse | ForEach-Object { $file = $_ $parent = $file.Directory.Name $grandParent = $file.Directory.Parent.Name Write-Host "文件路径: $($file.FullName)" Write-Host "直接上级文件夹: $parent" Write-Host "上两级文件夹: $grandParent`n" }
Python 实现
使用pathlib模块可以简洁地处理路径层级:
单个路径处理
from pathlib import Path file_path = Path("C:\\Users\\Bandit\\AppData\\Local\\Temp\\9c86ee608bb9477ebb11914c36a5a76d\\638110173610123239\\IDUDatabase_4.0.0.119\\IDUDatabase\\test.sql") # 直接上级文件夹 parent_folder = file_path.parent.name # 上两级文件夹 grandparent_folder = file_path.parent.parent.name print(f"直接上级文件夹: {parent_folder}") print(f"上两级文件夹: {grandparent_folder}")
循环处理文件
from pathlib import Path # 遍历指定目录下所有.sql文件 for file_path in Path("C:\\你的目标目录路径").rglob("*.sql"): parent = file_path.parent.name grandparent = file_path.parent.parent.name if file_path.parent.parent else "无上级目录" print(f"文件路径: {file_path}") print(f"直接上级文件夹: {parent}") print(f"上两级文件夹: {grandparent}\n")
Batch 脚本实现
通过批处理的for命令拆分路径层级:
单个路径处理
@echo off set "filePath=C:\Users\Bandit\AppData\Local\Temp\9c86ee608bb9477ebb11914c36a5a76d\638110173610123239\IDUDatabase_4.0.0.119\IDUDatabase\test.sql" :: 获取直接上级文件夹 for %%F in ("%filePath%") do set "parentDir=%%~dpF" for %%F in ("%parentDir%.") do set "parentFolder=%%~nxF" :: 获取上两级文件夹 for %%F in ("%parentDir%..") do set "grandParentFolder=%%~nxF" echo 直接上级文件夹: %parentFolder% echo 上两级文件夹: %grandParentFolder%
循环处理文件
@echo off setlocal enabledelayedexpansion set "targetDir=C:\你的目标目录路径" :: 遍历目录下所有.sql文件 for /r "%targetDir%" %%F in (*.sql) do ( echo 文件路径: %%~fF :: 提取直接上级文件夹 for %%D in ("%%~dpF.") do set "parent=%%~nxD" :: 提取上两级文件夹 for %%D in ("%%~dpF..") do set "grandParent=%%~nxD" echo 直接上级文件夹: !parent! echo 上两级文件夹: !grandParent! echo. ) endlocal
内容的提问来源于stack exchange,提问作者Bandit
相关产品推荐
相关产品推荐

