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

PowerShell脚本优化需求:删除旧快捷方式并创建新指向的快捷方式

修正后的PowerShell脚本及问题解决说明

完整可运行脚本

# 获取用户输入
$Location = Read-Host -Prompt '请输入目标路径'
$oldname = Read-Host -Prompt '请输入旧文件夹名称'
$newname = Read-Host -Prompt '请输入新文件夹名称'

# 复制旧文件夹内容到新文件夹(加-Force确保覆盖已有内容)
Copy-Item -Path "$Location\$oldname" -Destination "$Location\$newname" -Recurse -Force

$targetFolder = "$Location\$newname"

# 删除新文件夹中所有.lnk快捷方式
Get-ChildItem -Path $targetFolder -Filter *.lnk -File -Recurse | Remove-Item -Force

# 创建指向新文件夹中exe的标准快捷方式
$shell = New-Object -ComObject WScript.Shell

# 遍历所有exe文件,逐个创建对应快捷方式
Get-ChildItem -Path $targetFolder -Filter *.exe -File -Recurse | ForEach-Object {
    $exeFullPath = $_.FullName
    # 快捷方式放在exe同目录,和exe同名
    $shortcutPath = Join-Path -Path $_.DirectoryName -ChildPath "$($_.BaseName).lnk"

    $shortcut = $shell.CreateShortcut($shortcutPath)
    $shortcut.TargetPath = $exeFullPath
    $shortcut.WorkingDirectory = $_.DirectoryName  # 设置起始位置为exe所在路径
    $shortcut.Save()
}

# 释放COM对象,避免内存占用
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($shell) | Out-Null

原脚本问题及解决细节

1. 删除.lnk无效的原因

  • 路径未指定正确目标:原命令Get-ChildItem -Recursive *.lnk没指定新文件夹路径,默认搜索当前工作目录,改成指定-Path $targetFolder才会定位到新文件夹内的lnk文件。
  • 变量未解析:原Remove-Item '$folder\*'用了单引号,$folder不会被替换成实际路径,必须改用双引号。另外添加-Force参数可强制删除受系统保护的lnk文件。

2. 创建快捷方式的错误纠正

  • 混淆符号链接和Windows快捷方式:原代码用New-Item -ItemType SymbolicLink创建的是NTFS符号链接,这和带“起始位置”属性的.lnk快捷方式不是同一类型。必须借助WScript.Shell COM对象才能创建标准Windows快捷方式,并设置起始位置等专属属性。
  • 正确设置属性:通过CreateShortcut()生成快捷方式对象后,指定TargetPath为exe文件的完整路径,WorkingDirectory为exe所在目录(即“起始位置”),最后调用Save()保存生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:04:05