如何将文件完整路径作为参数传递给新PowerShell实例?
问题解决:PowerShell脚本参数传递失败的修复方案
核心问题分析
你遇到的错误源于两个关键问题:
- 被调用脚本的参数声明错误:使用了PowerShell自动变量
$args作为参数名,导致参数解析异常。 - 主脚本的进程启动参数格式错误:手动嵌套引号处理带空格的路径,引发参数解析失败。
修复步骤
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
相关产品推荐
相关产品推荐

