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

PowerShell脚本创建带文件参数的快捷方式时参数丢失问题求助

解决PowerShell创建快捷方式时Arguments丢失的问题

嘿,我之前也踩过这个坑!你遇到的Arguments字段丢失,大概率是几个容易忽略的细节没做好,我给你整理了修正后的函数和关键要点:

修正后的完整函数

Function MakeAShortcut($RunPath, $Arguments, $ShortcutName, $ShortcutLocation){
    # 确保快捷方式存放路径末尾带反斜杠,避免拼接出错
    if (-not $ShortcutLocation.EndsWith("\")) {
        $ShortcutLocation += "\"
    }
    # 拼接完整的快捷方式文件路径,必须带.lnk后缀
    $fullShortcutPath = $ShortcutLocation + $ShortcutName + ".lnk"
    
    $WScriptShell = New-Object -ComObject WScript.Shell
    $Shortcut = $WScriptShell.CreateShortcut($fullShortcutPath)
    
    # 设置快捷方式的目标程序路径
    $Shortcut.TargetPath = $RunPath
    # 核心:正确赋值Arguments参数,判断非空避免覆盖
    if ($null -ne $Arguments -and $Arguments -ne "") {
        $Shortcut.Arguments = $Arguments
    }
    # 可选:设置工作目录为目标程序所在文件夹,避免程序运行时路径异常
    $Shortcut.WorkingDirectory = Split-Path -Path $RunPath -Parent
    
    # 重中之重!必须调用Save(),否则所有设置都不会写入快捷方式文件
    $Shortcut.Save()
    
    # 释放COM对象,避免PowerShell残留未释放的实例(好习惯)
    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($Shortcut) | Out-Null
    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($WScriptShell) | Out-Null
}

关键注意事项

  • 路径拼接要规范:如果$ShortcutLocation末尾没有反斜杠,直接拼接会导致路径错误(比如C:\TempMyShortcut.lnk),函数里加了判断补全反斜杠的逻辑
  • 必须带.lnk后缀:WScript.Shell创建快捷方式时需要明确指定后缀,否则可能无法生成有效的快捷方式文件
  • Arguments赋值要明确:一定要显式给$Shortcut.Arguments赋值,并且判断参数非空,避免把原本的参数覆盖成空字符串
  • 别忘Save()方法:这是最容易漏的一步!所有属性设置完成后,必须调用Save()才能把配置写入到实际的快捷方式文件中
  • 释放COM对象:虽然PowerShell会自动回收,但显式释放能避免潜在的内存泄漏问题

使用示例

比如要在桌面创建一个打开D:\Notes\Todo.txt的记事本快捷方式:

MakeAShortcut -RunPath "notepad.exe" `
              -Arguments "D:\Notes\Todo.txt" `
              -ShortcutName "打开待办清单" `
              -ShortcutLocation [Environment]::GetFolderPath("Desktop")

内容的提问来源于stack exchange,提问作者A. S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:12:42