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

PowerShell脚本中替代CMD的%~1与%~dnp的方法问询

PowerShell替代CMD中%1和%dnp的写法

核心替代对应关系

  • CMD的%~1(第一个命令行参数)→ PowerShell的$args[0]
  • CMD的%~dnp1(驱动器+路径+文件名,不含扩展名)→ 通过PowerShell的文件对象属性组合获取

修改后的脚本示例

# 检查是否传入目标文件参数
if (-not $args[0]) {
    Write-Error "请将待处理文件路径作为脚本第一个参数传入"
    Read-Host -Prompt "按回车退出"
    exit 1
}

$start = Read-Host -prompt "剪辑开始时间(格式示例:00:00:00)"

# 将参数转为文件对象,方便提取路径属性
$inputFile = Get-Item $args[0]
# 生成输出路径:原文件所在目录+原文件名(不含扩展名)
$outputPath = Join-Path $inputFile.DirectoryName $inputFile.BaseName

# 执行ffmpeg,-Wait确保脚本等待处理完成
Start-Process ffmpeg -Wait -ArgumentList "-i", "`"$($inputFile.FullName)`"", "-ss", $start, "`"$outputPath.mp4`""

Read-Host -Prompt "按回车退出"

关键说明

  1. 命令行参数获取:$args是PowerShell内置的参数数组,$args[0]就是脚本启动时传入的第一个参数,和CMD的%~1作用完全一致。
  2. 文件属性提取:用Get-Item把路径转为文件对象后,可以直接调用属性:
    • $inputFile.FullName:文件完整路径(对应CMD的%~f1)
    • $inputFile.DirectoryName:文件所在目录路径
    • $inputFile.BaseName:文件名(不含扩展名)
      用Join-Path组合这两个属性,就能得到%~dnp1对应的路径。
  3. 参数传递优化:Start-Process的-ArgumentList用逗号分隔参数,PowerShell会自动处理空格和引号问题,比直接拼接字符串更不易出错,也省去了手动转义的麻烦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:42:16