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

如何基于子文件夹*.mp4文件触发独立进程的PowerShell脚本

优化后的PowerShell实现方案

你的原始代码存在几个问题:如果一个子文件夹里有多个MP4文件,会重复启动多次脚本;相对路径调用脚本容易找不到文件;没有验证脚本是否存在。下面是针对需求的最优实现:

# 定位到Cut文件夹
$rootPath = "$env:USERPROFILE\Desktop\Cut"

# 获取Cut下所有包含MP4文件的直接子文件夹(Model 01、Model 02这类),自动去重
$targetFolders = Get-ChildItem -Path $rootPath -Directory | Where-Object {
    # 检查当前文件夹下是否存在MP4文件
    Test-Path -Path (Join-Path $_.FullName "*.mp4")
}

# 遍历每个符合条件的文件夹
foreach ($folder in $targetFolders) {
    $scriptFullPath = Join-Path $folder.FullName "ffmpeg.ps1"
    
    # 先确认脚本存在,避免启动无效进程
    if (Test-Path -Path $scriptFullPath -PathType Leaf) {
        # 以独立PowerShell进程启动脚本,同时指定工作目录为目标子文件夹
        Start-Process -FilePath powershell.exe `
            -ArgumentList "-File `"$scriptFullPath`"" `
            -WorkingDirectory $folder.FullName
    }
}

关键优化点说明:

  • 精准筛选文件夹:只遍历Cut下的直接子文件夹(通过-Directory参数),并通过Test-Path判断是否存在MP4文件,避免重复触发同一个文件夹的脚本
  • 绝对路径调用脚本:用Join-Path拼接脚本的完整路径,彻底解决相对路径找不到文件的问题,同时兼容带空格的文件夹/文件名
  • 验证脚本存在性:启动前先检查ffmpeg.ps1是否存在,避免无意义的进程启动
  • 指定工作目录:通过-WorkingDirectory确保脚本运行时的当前目录是目标子文件夹,适配脚本中依赖当前目录的操作(比如读取同文件夹内的文件)

如果需要递归处理Cut下所有层级的子文件夹(不仅仅是直接子文件夹),只需给Get-ChildItem加上-Recurse参数即可:

$targetFolders = Get-ChildItem -Path $rootPath -Directory -Recurse | Where-Object {
    Test-Path -Path (Join-Path $_.FullName "*.mp4")
}

内容的提问来源于stack exchange,提问作者Tyrone Hirt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 12:01:06