用嵌套文件夹中的相对符号链接替换快捷方式

问题描述 投票:0回答:2

我需要帮助使用 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
}

有什么帮助吗?我怎样才能让它找到所需的路径和

../
的数量?

powershell symlink shortcut
2个回答
0
投票

我想我找到了该怎么做。这是脚本:

$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')"
}

0
投票

@huh-hulk,这类对文件或文件夹执行批量操作的东西,在未经严格测试的情况下运行时非常不稳定。在对真实文件和文件夹进行尝试之前,您应该在一组孤立的实验/废弃文件和文件夹上进行测试:(

© www.soinside.com 2019 - 2024. All rights reserved.