使用命令行/脚本递归创建文件快捷方式(.lnk 文件)以及文件夹结构?

使用命令行/脚本递归创建文件快捷方式(.lnk 文件)以及文件夹结构?

我正在尝试将文件夹的文件夹结构复制SOURCETARGET文件夹,包括子文件夹(空和非空),而不复制文件本身,而是想在TARGET文件夹结构中为各自的文件夹中的所有文件创建文件快捷方式。

我已经尝试过这个,并成功创建了文件夹结构:

C:\>XCOPY SOURCE TARGET /T /E

但我无法找到为文件夹源.lnk中的相应文件创建文件快捷方式(文件)的选项TARGET

源文件夹和目标文件夹的图形表示

答案1

这个 PowerShell 函数可以解决问题。

将其保存为任意位置Create-ShortcutForEachFile.ps1

将其加载到 PowerShell 会话中,如下所示:. C:\somewhere\Create-ShortcutForEachFile.ps1

然后像这样使用它:Create-ShortcutForEachFile -Source C:\foo -Destination C:\bar -Recurse

function Create-ShortcutForEachFile {

    Param(
        [ValidateNotNullOrEmpty()][string]$Source,
        [ValidateNotNullOrEmpty()][string]$Destination,
        [switch]$Recurse
    )

    # set recurse if present
    if ($Recurse.IsPresent) { $splat = @{ Recurse = $true } }

    # Getting all the source files and source folder
    $gci = gci $Source @splat
    $Files = $gci | ? { !$_.PSisContainer }
    $Folders = $gci | ? { $_.PsisContainer }

    # Creating all the folders
    if (!(Test-Path $Destination)) { mkdir $Destination -ea SilentlyContinue > $null }
    $Folders | % {
        $Target = $_.FullName -replace [regex]::escape($Source), $Destination
        mkdir $Target -ea SilentlyContinue > $null
    }

    # Creating Wscript object
    $WshShell = New-Object -comObject WScript.Shell

    # Creating all the Links
    $Files | % {
        $InkName = "{0}.lnk" -f $_.BaseName
        $Target = ($_.DirectoryName -replace [regex]::escape($Source), $Destination) + "\" + $InkName
        $Shortcut = $WshShell.CreateShortcut($Target)
        $Shortcut.TargetPath = $_.FullName
        $Shortcut.Save()
    }
}

相关内容