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

如何将文件完整路径作为参数传递给新PowerShell实例?

问题解决:PowerShell脚本参数传递失败的修复方案

核心问题分析

你遇到的错误源于两个关键问题:

  1. 被调用脚本的参数声明错误:使用了PowerShell自动变量$args作为参数名,导致参数解析异常。
  2. 主脚本的进程启动参数格式错误:手动嵌套引号处理带空格的路径,引发参数解析失败。

修复步骤

1. 修正被调用脚本(ffmpeg crop.ps1)

将错误的参数声明替换为自定义参数名,避免覆盖自动变量$args:

# 正确声明参数,自定义参数名而非使用$args
param([string]$TargetFile)

# 输出接收到的文件完整路径
Write-Host "接收到的文件路径:$TargetFile"

Read-Host -Prompt "按回车继续"

2. 修正主脚本的进程调用逻辑

使用Start-Process的标准参数传递方式,让PowerShell自动处理带空格路径的引号问题,无需手动嵌套引号:

$LocalFolder = "$env:USERPROFILE\Desktop\Banana Productions"
$RenderClient = "$LocalFolder\Render\Modelo 02\Cliente 02"
$CutFolder = "$RenderClient\Cortar"
$FFMpegScript = "$CutFolder\ffmpeg crop.ps1" 

Get-ChildItem "$RenderClient\Cortar" *.mp4 -File -Recurse | ForEach-Object {
    $FilePath = $_.FullName
    # 通过-ArgumentList传递参数数组,自动处理空格路径的引号
    Start-Process -FilePath powershell.exe -ArgumentList "-NoExit", "-File", $FFMpegScript, $FilePath
    Write-Host $FilePath
}

原理说明

  • 自动变量$args的特殊性:$args是PowerShell内置的自动变量,用于接收未显式声明的参数,不能将其作为自定义参数的名称,否则会破坏参数解析逻辑。
  • Start-Process的参数处理:当通过-ArgumentList传递数组形式的参数时,PowerShell会自动为包含空格的路径添加正确的引号,避免手动嵌套引号导致的解析错误。

内容的提问来源于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.02 15:45:36