You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何遍历含可变部分的文件夹路径?含Blender路径通配符改写示例

刚好我经常处理这类路径匹配和遍历的需求,给你拆解成几个核心点来解决:

一、先搞定环境变量的解析

像%USERNAME%这种是Windows系统的环境变量,不管是遍历还是路径匹配,第一步要么把它解析成实际路径,要么让工具直接识别变量名处理,分常用工具给你方案:

1. Windows Batch 脚本

Batch会自动解析路径里的%xxx%格式变量,直接用通配符*匹配可变文件夹就行:

rem 遍历所有blender开头的文件夹,执行里面的blender -R
for /d %%i in ("C:\Users\%USERNAME%\OneDrive\Applications\blender*") do (
    echo 找到匹配的文件夹:%%i
    "%%i\blender" -R
)

如果是处理%known_path%\folder-[%CHANGEABLE_PART%]\there.exe这种格式,直接把[%CHANGEABLE_PART%]换成*,Batch同样能识别:

for /d %%i in ("%known_path%\folder-*") do (
    "%%i\there.exe"
)

2. PowerShell

PowerShell里用$env:变量名调用环境变量,通配符支持更灵活:

# 解析USERNAME变量,遍历blender开头的文件夹
$targetPaths = Get-ChildItem -Path "C:\Users\$env:USERNAME\OneDrive\Applications\blender*" -Directory
foreach ($folder in $targetPaths) {
    Write-Host "找到目标文件夹:$($folder.FullName)"
    # 执行blender -R命令
    & "$($folder.FullName)\blender" -R
}

要是你手里是带占位符的字符串(比如%USERNAME%\Apps\blender-[%VERSION%]\blender),可以先解析环境变量再替换占位符:

$originalStr = "%USERNAME%\OneDrive\Applications\blender-[%VERSION%]\blender -R"
# 先替换已知环境变量
$parsedStr = [Environment]::ExpandEnvironmentVariables($originalStr)
# 把可变占位符换成通配符
$wildcardStr = $parsedStr -replace '\[%VERSION%\]', '*'

3. Python(跨平台通用)

用os.path.expandvars()解析环境变量,glob模块处理通配符遍历:

import os
import glob
import subprocess

# 解析环境变量并生成带通配符的路径
base_path = os.path.expandvars(r"C:\Users\%USERNAME%\OneDrive\Applications\blender*")

# 遍历所有匹配的文件夹
for folder in glob.glob(base_path):
    if os.path.isdir(folder):
        print(f"找到匹配文件夹:{folder}")
        blender_exe = os.path.join(folder, "blender")
        # 执行blender -R命令
        subprocess.run([blender_exe, "-R"], check=True)
二、路径格式转换技巧

比如你举的例子:C:\Users\%USERNAME%\OneDrive\Applications\blender-2.78.0-git.1bd6ed7-windows64\blender -R 转成 C:\Users\%USERNAME%\OneDrive\Applications\blender*\blender -R

核心是识别可变部分的规律,把固定前缀/后缀之间的可变内容替换成*:

  • 如果是版本号这类有固定前缀(比如blender-)和后缀(比如-windows64)的,直接把中间的版本字符串换成*
  • 如果是folder-[%CHANGEABLE_PART%]这种明确的占位符格式,直接替换[%CHANGEABLE_PART%]为*就行

举个Batch里的字符串替换示例:

set "originalPath=C:\Users\%USERNAME%\OneDrive\Applications\blender-2.78.0-git.1bd6ed7-windows64\blender -R"
rem 把版本段替换成通配符
set "wildcardPath=%originalPath:blender-*-windows64=blender*%"
echo 转换后的路径:%wildcardPath%
三、遍历的注意事项
  • 通配符*默认不匹配路径分隔符\,如果要遍历子文件夹里的内容,PowerShell和Python可以用**(比如blender**\blender.exe),Batch需要额外嵌套循环处理
  • 确保你有目标文件夹的访问权限,否则遍历会抛出权限错误
  • 如果有多个匹配的文件夹,可根据需求筛选(比如按创建时间排序取最新的一个)

内容的提问来源于stack exchange,提问作者Yu Da Chi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:23:33