Как создать несколько ярлыков одновременно для всех файлов .exe в каталоге, используя powershell - PullRequest
1 голос
/ 11 апреля 2020

Привет, я хочу создать несколько ярлыков одновременно, используя powershel и что-то вроде этого

Get-ChildItem -Path D:\something\ -Include *.exe -File -Recurse -ErrorAction SilentlyContinue

получить результаты и сгенерировать ярлыки (файлы .lnk) для всех файлов .exe

(.exe - это только один пример типа файла)

Можете ли вы мне помочь? ТНХ

1 Ответ

0 голосов
/ 11 апреля 2020

Чтобы создать ярлыки всех ваших .exe файлов в каталоге, вы можете сделать следующее:

  • Создать Windows Хост сценария COM-объект для создания ярлыков. Для получения дополнительной информации вы можете посмотреть Создание COM-объектов с New-Object из MSDN.
  • Получить все .exe файлы в каталоге. Аналогично тому, что вы уже сделали с Get-ChildItem.
  • Выполните итерацию каждого из этих файлов. Здесь можно использовать foreach или Foreach-Object.
  • Извлечение BaseName из файлов. Это означает получение test от test.exe. Это нужно для создания файла ярлыка.
  • Создание ярлыка из пути. Этот путь является просто целевым путем + имя файла + .lnk расширение. Мы можем использовать Join-Path здесь, чтобы проложить этот путь.
  • Установить целевой путь ярлыка для исполняемого файла и сохранить ярлык.

Демонстрация:

$sourcePath = "C:\path\to\shortcuts"
$destinationPath = "C:\path\to\destination"

# Create COM Object for creating shortcuts
$wshShell = New-Object -ComObject WScript.Shell

# Get all .exe files from source directory
$exeFiles = Get-ChildItem -Path $sourcePath -Filter *.exe -Recurse

# Go through each file
foreach ($file in $exeFiles)
{
    # Get executable filename
    $basename = $file.BaseName

    # Create shortcut path to save to
    $shortcutPath = Join-Path -Path $destinationPath -ChildPath ($basename + ".lnk")

    # Create shortcut
    $shortcut = $wshShell.CreateShortcut($shortcutPath)

    # Set target path of shortcut to executable
    $shortcut.TargetPath = $file.FullName

    # Finally save the shortcut to the path
    $shortcut.Save()
}
...