Windows系统批量修改“快捷方式”的目标位置

目录

编写运行.ps1文件

代码解释(不重要,建议跳过)

报错

总结 


当“快捷方式”的原文件被移动到其他文件夹,而“快捷方式”没有及时更新,此时“快捷方式”失效。

我们可以使用powershell工具,批量修改“快捷方式”的起始位置,修改到新的路径。适用于文件名不改变,只改变文件路径的情况。

编写运行.ps1文件

新建文本文档,输入如下内容:

$shortcutFolder = "D:\111\新建文件夹\" # 指定快捷方式所在的文件夹路径
$oldStartPath = "D:\1\" # 指定旧的起始文件夹路径
$newStartPath = "D:\2023\" # 指定新的起始文件夹路径

Get-ChildItem -Path $shortcutFolder -Filter *.lnk -Recurse | ForEach-Object {
    $shell = New-Object -ComObject WScript.Shell
    $shortcut = $shell.CreateShortcut($_.FullName)
    if ($shortcut.TargetPath.StartsWith($oldStartPath)) {
        $newTargetPath = $newStartPath + $shortcut.TargetPath.Remove(0, $oldStartPath.Length)
        $shortcut.TargetPath = $newTargetPath
        $shortcut.Save()
        Write-Host "目标已更新:" $_.FullName
    }
}

路径根据情况修改。代码中的 `$oldStartPath` 和 `$newStartPath` 分别代表需要替换的旧起始路径和新起始路径。我们遍历快捷方式文件并使用 `StartsWith()` 方法检查目标路径是否以指定的旧起始路径开始,如果是,则将新目标路径转换为 `$newStartPath` 加上从旧路径长度起始的子字符串,并将其分配给 `$shortcut.TargetPath`。最后,我们保存更新的快捷方式并输出 `Write-Host` 语句以指示更新成功。

保存为“.ps1”为后缀的文件,如“111.ps1”。打开powershell,在“111.ps1”的路径下输入“ .\111.ps1”,执行该文件。

代码解释(不重要,建议跳过)

GPT给出的相关代码解释:

以下是代码各部分的解释:

```
$shortcutFolder = "D:\111\新建文件夹\" # 指定快捷方式所在的文件夹路径
$oldStartPath = "D:\1\" # 指定旧的起始文件夹路径
$newStartPath = "D:\2023\" # 指定新的起始文件夹路径
```

这三行定义了需要更新的快捷方式所在的文件夹路径、旧的起始文件夹路径和新的起始文件夹路径。请根据你的实际情况进行替换。

```
Get-ChildItem -Path $shortcutFolder -Filter *.lnk -Recurse | ForEach-Object {
```

`Get-ChildItem` 命令使用指定的 `$shortcutFolder` 路径获取所有扩展名为 `.lnk` 的文件(即快捷方式文件),并添加 `-Recurse` 标志以检索子文件夹中的文件。`|` 管道将该列表传递到 `ForEach-Object` 命令以进行迭代。

```
    $shell = New-Object -ComObject WScript.Shell
    $shortcut = $shell.CreateShortcut($_.FullName)
```

这里我们创建了一个 `WScript.Shell` COM 对象实例并使用 `.CreateShortcut()` 方法打开每个快捷方式文件。

```
    if ($shortcut.TargetPath.StartsWith($oldStartPath)) {
```

这行代码使用 `StartsWith()` 方法检查快捷方式文件指向的目标路径是否以旧起始路径 `$oldStartPath` 开头。如果它是,那么我们需要更新该目标路径。

```
        $newTargetPath = $newStartPath + $shortcut.TargetPath.Remove(0, $oldStartPath.Length)
```

此行代码构建了新的目标路径 `$newTargetPath`。它将新起始路径 `$newStartPath` 与去除旧起始路径长度后的原始目标路径 `$shortcut.TargetPath` 组合而成。

```
        $shortcut.TargetPath = $newTargetPath
        $shortcut.Save()
        Write-Host "目标已更新:" $_.FullName
```

这三行代码将新的目标路径 `$newTargetPath` 赋值给 `$shortcut.TargetPath` 并调用 `.Save()` 方法保存更新的快捷方式文件。最后,我们使用 `Write-Host` 输出语句来指示哪些快捷方式文件被更新了目标路径。

```
}
```

此行代码结束了 `ForEach-Object` 块。

整个脚本的作用是递归遍历 `$shortcutFolder` 中的所有扩展名为 `.lnk` 的文件,并将指向原始目标路径 `$oldStartPath` 的快捷方式目标路径替换为新的目标路径 `$newStartPath` 加上原始目标路径中剩余的部分。最后将更新后的快捷方式保存并输出语句,指示哪些快捷方式已被更新了目标路径。

报错

powershell运行指令,常出现的报错及处理参见:

Windows系统powershell运行指令常见报错及处理_weixin_56337147的博客-CSDN博客 

总结 

编写运行.ps1文件,实现批量修改“快捷方式”的目标位置。

猜你喜欢

转载自blog.csdn.net/weixin_56337147/article/details/130701457