【问题标题】:Replace shortcut with relative symlink in nested folders用嵌套文件夹中的相对符号链接替换快捷方式
【发布时间】:2016-01-30 22:16:11
【问题描述】:

我需要帮助才能使用 PowerShell 将所有 Windows 快捷方式转换为相对软链接(符号链接)。 所有原始文件(快捷方式的目标)都在一个文件夹中,其中还有另一个文件夹,其中包含文件、快捷方式和其他文件夹(可以包含其他文件、快捷方式和文件夹)。

我正在寻找的是为每个快捷方式创建这个命令(最终更多../):

cmd /c 'mklink "path/shortcut.txt" "../file.txt"' && del "path/shortcut.txt.lnk"

通过这段代码,我可以获得快捷方式目标的绝对路径:

dir * -Include *.lnk -Recurse | ForEach-Object {
  $sh = New-Object -ComObject WScript.Shell
  $fullpath = $sh.CreateShortcut($_.FullName).TargetPath
}

有什么帮助吗?如何让它找到所需的../的路径和数量?

【问题讨论】:

  • Resolve-Path -Relative
  • 我不建议这样做。快捷方式提供的功能不仅仅是某些文件的路径。
  • 我需要符号链接,因为它们适用于 linux 和其他程序(如 FTP),而且它们可以有相对路径。
  • @PetSerAl 谢谢!这有帮助!

标签: powershell symlink shortcut


【解决方案1】:

我想我找到了方法。这是脚本:

$obj = New-Object -ComObject WScript.Shell;
dir * -Include *.lnk -Recurse | ForEach-Object {
    $file = $obj.CreateShortcut($_.FullName).TargetPath -Replace '.*\\'
    $name = $(Resolve-Path -Relative $_) -Replace '^\.\\' -Replace "\.lnk$"
    $rel = '';
    for ($i=0; $i -le ([regex]::Matches($nomeok, '\\' )).count; $i++) {
        $rel = $rel + '..\\'
    }
    cmd /c mklink "$name" "$($rel + $file)"
    del "$($name + '.lnk')"
}

【讨论】:

  • 它只是用指向“”的符号链接替换了所有文件。谢啦兄弟。 6 小时的工作被冲到下水道。
猜你喜欢
  • 2010-11-18
  • 2015-05-08
  • 1970-01-01
  • 1970-01-01
  • 2022-12-11
  • 2010-10-09
  • 2016-05-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多