【问题标题】:Reading Directory + Creating Shortcuts with PowerShell阅读目录 + 使用 PowerShell 创建快捷方式
【发布时间】:2021-10-04 14:35:02
【问题描述】:

每个人。我正在尝试找出一种方法来读取 Windows 中目录的内容并查找具有特定文件扩展名的文件(在本例中为“.hod”),然后将每个文件的快捷方式创建到“C:\Users”中\公共\桌面。'

下面是我迄今为止在 PowerShell 中测试的一个示例(我知道它看起来非常糟糕)。我会很感激任何意见。谢谢。

$shortcutfiles = dir "C:\C:\IBM-Shortcuts\*.hod"
$DestinationDir = "C:\Users\Public\Desktop"
foreach ($shortcutfile in $shortcutfiles ) {
$TargetPath = Get-ChildItem "C:\IBMiACS-Shortcuts" -Filter *.hod -Recurse | % { $_.FullName }
$BaseName = Get-ChildItem "C:\IBMiACS-Shortcuts" -Filter *.hod -Recurse | % { $_.BaseName }
$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("$DestinationDir" & "$BaseName"+lnk)
$Shortcut.TargetPath = "$TargetPath"
$Shortcut.Save()
}

【问题讨论】:

    标签: powershell shortcut


    【解决方案1】:

    这里有几点需要注意:

    • 使用完整的 cmdlet 名称而不是别名,这是为了清楚起见。
      • Get-Childitem 而不是 dir
      • ... | Foreach-Object { ... 而不是 ... | % ...
    • 仅遍历文件夹内容一次并在循环中引用$_ 变量,而不是在循环中循环
    • 如果一个变量只被使用一次,那么不要费心将它存储在它自己的变量中
      • $Destination 已不再使用
    • 按照基本格式rules 缩进代码
    • 正如@mklement0 所述,值得在管道之前只执行一次$WshShell = New-Object -comObject WScript.Shell
    $WshShell = New-Object -comObject WScript.Shell
    
    Get-ChildItem "C:\IBM-Shortcuts\*.hod" | Foreach-Object {
        $Shortcut = $WshShell.CreateShortcut("C:\Users\Public\Desktop\$($_.BaseName).lnk")
        $Shortcut.TargetPath = $_.FullName
        $Shortcut.Save()
    }
    

    其他一些注意事项:

    • 在第 1 行,您引用了 "C:\C:\IBM-Shortcuts\*.hod",其中的 C:\ 太多了。
    • 您对$TargetPath = Get-ChildItem "C:\IBMiACS-Shortcuts" -Filter *.hod -Recurse | % { $_.FullName } 的使用不是为$Shortcutfile 的当前迭代设置targetpath,它返回"C:\IBMiACS-Shortcuts" 中所有文件路径的列表
    • 了解foreach 循环here 的基础知识

    【讨论】:

    • 谢谢你,水獭。代码效果很好。感谢您的帮助。
    • 没问题,要将答案标记为已接受,请单击答案旁边的复选标记以将其从灰色切换为已填充。
    猜你喜欢
    • 2015-10-06
    • 2012-03-30
    • 2018-10-08
    • 2021-03-09
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    相关资源
    最近更新 更多