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

如何在递归PowerShell循环中自动应答覆盖提示?

如何在递归PowerShell循环中自动应答覆盖提示?

看起来你遇到的问题根源其实是ffmpeg的覆盖确认提示,而不是PowerShell的Remove-Item命令——这就是为什么你之前尝试的echo y |和Remove-Item -Force都没解决问题。让我给你几个可行的解决方案:

1. 给ffmpeg添加自动覆盖参数(最直接的解决办法)

ffmpeg本身有一个-y参数,作用是自动确认覆盖任何已存在的输出文件,完全跳过交互提示。你只需要把这个参数加到ffmpeg命令的最前面:

Get-ChildItem -Filter *.mp4 -Recurse | % { 
    ffmpeg -y -i $_.FullName -vf "scale='if(gt(ih,iw),360,-2)':'if(gt(iw,ih),360,-2)'" "$($_.FullName)_scaled.mp4" && Remove-Item $_.FullName 
}

这个参数会让ffmpeg在遇到已存在的_scaled.mp4文件时直接覆盖,不会弹出任何提示。

2. 提前跳过已处理的文件(更高效的做法)

如果你不想重复处理已经完成缩放的文件(毕竟重新覆盖也是浪费时间),可以在循环里先检查目标文件是否存在,只处理还没生成缩放版本的原视频:

Get-ChildItem -Filter *.mp4 -Recurse | % { 
    $scaledPath = "$($_.FullName)_scaled.mp4"
    if (-not (Test-Path $scaledPath)) {
        ffmpeg -i $_.FullName -vf "scale='if(gt(ih,iw),360,-2)':'if(gt(iw,ih),360,-2)'" $scaledPath && Remove-Item $_.FullName
    }
}

这样既避免了覆盖提示,还能节省重复处理的时间,一举两得。

为什么你之前的方法没用?

  • echo y | 在PowerShell里的管道行为和CMD不同,而且ffmpeg的交互提示不一定会从标准输入读取确认信息,所以这个方法无效。
  • Remove-Item -Force 只是用来跳过删除文件时的确认提示,但你的问题出在ffmpeg生成文件的阶段,所以这个参数对ffmpeg的覆盖提示完全不起作用。

备注:内容来源于stack exchange,提问作者cudnn_account

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 10:04:54