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

PowerShell脚本如何模拟在其他目录下调用外部命令

PowerShell指定转码命令工作目录实现自动输出到目标文件夹

other-transcode 没有自定义输出路径参数,所有输出文件都会写到进程启动时的工作目录,要在脚本里复现手动cd到输出目录再执行命令的效果,有两种可靠实现方式,和手动操作的执行逻辑完全一致。

方法1:单进程指定工作目录(推荐)

用Start-Process单独给转码进程指定工作目录,不会修改脚本本身的当前路径,不会干扰后续其他路径操作,是最稳妥的方案。
示例脚本:

# 按需修改这两个路径
$inputDir = "D:\your_video_folder\input"
$outputDir = "D:\your_video_folder\output"

# 输出目录不存在则自动创建
if (!(Test-Path $outputDir)) {
    New-Item -ItemType Directory -Path $outputDir | Out-Null
}

# 遍历输入目录下所有mp4文件,要支持其他格式自行修改Filter参数
Get-ChildItem -Path $inputDir -Filter *.mp4 -File | ForEach-Object {
    Write-Host "当前转码文件:$($_.Name)"
    # 核心参数:-WorkingDirectory 指定转码进程的工作目录为输出文件夹
    # -Wait 等待当前文件转码完成再处理下一个,避免多进程抢占资源
    # -NoNewWindow 转码日志直接打印在当前窗口,方便查看进度
    Start-Process other-transcode -ArgumentList "`"$($_.FullName)`"" -WorkingDirectory $outputDir -Wait -NoNewWindow
}

参数说明:

  • -WorkingDirectory $outputDir 完全等价于手动打开shell后cd到输出目录的操作,转码进程的工作路径会被精准设置为目标输出文件夹,生成的文件直接存在这里
  • 传入输入文件时用全路径,不需要手动计算相对路径,不会出现找不到输入文件的问题

方法2:临时切换脚本工作目录

如果脚本逻辑简单,也可以临时把脚本的当前路径切到输出目录,执行完所有转码后再切回原路径,记得加finally块保证异常时也能恢复路径:

$originalPath = Get-Location
$inputDir = "D:\your_video_folder\input"
$outputDir = "D:\your_video_folder\output"

if (!(Test-Path $outputDir)) {
    New-Item -ItemType Directory -Path $outputDir | Out-Null
}

try {
    Set-Location $outputDir
    Get-ChildItem -Path $inputDir -Filter *.mp4 -File | ForEach-Object {
        Write-Host "当前转码文件:$($_.Name)"
        other-transcode $_.FullName
    }
}
finally {
    # 无论转码成功、报错中断,最后都会切回脚本启动时的原路径
    Set-Location $originalPath
}

注意点

  • 两种方案的最终效果和手动操作完全一致,输出文件名和输入文件对应,直接落在指定的输出目录,不需要转码完成后再移动文件
  • 如果需要匹配mov、mkv等其他视频格式,可以把Get-ChildItem的Filter参数改成对应扩展名,或者用-Include *.mp4,*.mov,*.mkv匹配多格式
  • 路径包含空格时,脚本里给路径加双引号的写法已经做了兼容,不需要额外处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 04:51:22