НейроАгент

Добавление опции EmbyIgnore в контекстное меню Windows

Узнайте, как создать элемент контекстного меню Windows, который генерирует файлы .embyignore с содержимым, специфичным для папки. Полное руководство со скриптами PowerShell и настройкой реестра.

Вопрос

Как создать элемент контекстного меню Windows, который создаёт файл .embyignore с содержимым, специфичным для папки?

Мне нужно создать элемент контекстного меню в проводнике Windows, который:

  • Добавляет опцию “Создать файл EmbyIgnore” при щелчке правой кнопкой мыши по папке
  • Создаёт текстовый файл с именем “.embyignore” внутри выбранной папки
  • Заполняет файл содержимым “имя папки/*”, где “имя папки” - это имя папки, по которой щёлкнули правой кнопкой мыши

Я знаком с созданием ключей реестра Windows, но мне нужна помощь с конкретным кодом для динамического вставки имени папки в содержимое файла.

НейроАгент

Создание элемента контекстного меню Windows для генерации файла .embyignore

Чтобы создать элемент контекстного меню Windows, который генерирует файл .embyignore с содержимым, специфичным для папки, вам потребуется объединить редактирование реестра со скриптом PowerShell, который динамически вставляет имя папки. Это включает создание записи в реестре, которая указывает на скрипт PowerShell, который затем будет генерировать файл .embyignore с соответствующим содержимым “имя папки/*”.


Содержание


Настройка ключа реестра

Сначала вам нужно создать структуру реестра, которая добавит ваш вариант в контекстное меню. Откройте редактор реестра, нажав Win + R, введя regedit и нажав Enter.

  1. Перейдите к: HKEY_CLASSES_ROOT\Directory\background\shell
  2. Щелкните правой кнопкой мыши по shell → Создать → Раздел
  3. Назовите раздел CreateEmbyIgnore (или предпочитаемое вами имя)
  4. Щелкните правой кнопкой мыши по вашему новому разделу → Создать → Параметр типа String
  5. Назовите его Icon (необязательно - для пользовательского значка)
  6. Дважды щелкните Icon и установите значение: C:\Windows\System32\shell32.dll,3 (или предпочитаемый вами значок)

Теперь щелкните правой кнопкой мыши по разделу CreateEmbyIgnore → Создать → Параметр типа String → Назовите его Position и установите значение Top, чтобы он появлялся вверху контекстного меню.


Создание скрипта PowerShell

Создайте файл скрипта PowerShell, который будет генерировать файл .embyignore с динамическим содержимым. Сохраните этот скрипт как CreateEmbyIgnore.ps1 в расположении, например, C:\Scripts\CreateEmbyIgnore.ps1:

powershell
param(
    [Parameter(Mandatory=$true)]
    [string]$FolderPath
)

# Получаем имя папки из пути
$folderName = Split-Path -Path $FolderPath -Leaf

# Определяем содержимое для файла .embyignore
$content = "$folderName/*"

# Определяем полный путь для файла .embyignore
$ignoreFilePath = Join-Path -Path $FolderPath -ChildPath ".embyignore"

# Создаем файл с динамическим содержимым
$content | Out-File -FilePath $ignoreFilePath -Encoding UTF8

# Необязательно: Показать сообщение об успехе
Write-Host "Создан файл .embyignore в: $ignoreFilePath"
Write-Host "Содержимое: $content"

Этот скрипт принимает путь к папке в качестве параметра, извлекает имя папки и создает файл .embyignore с содержимым “имя папки/*”.


Интеграция с реестром

Теперь создайте запись в реестре, которая будет выполнять ваш скрипт PowerShell. Щелкните правой кнопкой мыши по разделу CreateEmbyIgnore → Создать → Раздел → Назовите его command.

Дважды щелкните по значению (Default) в разделе command и установите его:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -File "C:\Scripts\CreateEmbyIgnore.ps1" -FolderPath "%V"

Важно: Замените C:\Scripts\CreateEmbyIgnore.ps1 на фактический путь к вашему файлу скрипта. Переменная %V представляет путь к папке при щелчке правой кнопкой мыши по фону папки.

Для контекстных меню, специфичных для папки (при щелчке правой кнопкой мыши по самой папке, а не по фону), вы можете использовать %1 вместо %V.


Тестирование и устранение неполадок

Чтобы протестировать вашу реализацию:

  1. Щелкните правой кнопкой мыши по любому фону папки
  2. Вы должны увидеть “Создать файл .embyignore” в контекстном меню
  3. Нажмите на него и проверьте, создается ли файл .embyignore

Распространенные проблемы и решения:

  • Скрипт не выполняется: Проверьте политику выполнения, запустив Get-ExecutionPolicy в PowerShell. Если она Restricted, выполните Set-ExecutionPolicy RemoteSigned в окне PowerShell с повышенными привилегиями.
  • Имя папки не отображается: Убедитесь, что вы используете правильную переменную (%V для фона, %1 для папки).
  • Файл не создается: Проверьте путь к скрипту в реестре и убедитесь, что у вас есть права на запись в целевую папку.
  • Специальные символы: Если имена папок содержат специальные символы, вам может потребоваться добавить дополнительное экранирование в вашем скрипте PowerShell.

Вот улучшенная версия скрипта, которая обрабатывает специальные символы:

powershell
param(
    [Parameter(Mandatory=$true)]
    [string]$FolderPath
)

try {
    # Получаем имя папки из пути
    $folderName = Split-Path -Path $FolderPath -Leaf
    
    # Обрабатываем специальные символы, экранируя их для шаблона файла игнорирования
    $escapedFolderName = $folderName -replace '([[\]{}()*+?.\\^$|])', '`$1'
    
    # Определяем содержимое для файла .embyignore
    $content = "$escapedFolderName/*"
    
    # Определяем полный путь для файла .embyignore
    $ignoreFilePath = Join-Path -Path $FolderPath -ChildPath ".embyignore"
    
    # Создаем файл с динамическим содержимым
    $content | Out-File -FilePath $ignoreFilePath -Encoding UTF8
    
    # Показываем сообщение об успехе
    Write-Host "Успешно создан файл .embyignore в: $ignoreFilePath"
    Write-Host "Содержимое: $content"
}
catch {
    Write-Host "Ошибка при создании файла .embyignore: $_" -ForegroundColor Red
    exit 1
}

Альтернативные методы

Использование пакетного файла вместо PowerShell

Если вы предпочитаете подход с пакетным файлом, создайте CreateEmbyIgnore.bat:

batch
@echo off
set "folderpath=%~1"
for %%F in ("%folderpath%") do set "foldername=%%~nxF"
echo %foldername%/* > "%folderpath%\.embyignore"
echo Создан файл .embyignore в: %folderpath%

Запись в реестре была бы:

"%~dp0CreateEmbyIgnore.bat" "%V"

Использование файла реестра (.reg) для легкого развертывания

Для более легкого развертывания создайте файл .reg, который пользователи могут дважды щелкнуть:

reg
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\background\shell\CreateEmbyIgnore]
@="Создать файл .embyignore"
"Icon"="C:\\Windows\\System32\\shell32.dll,3"
"Position"="Top"

[HKEY_CLASSES_ROOT\Directory\background\shell\CreateEmbyIgnore\command]
@="C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe -ExecutionPolicy Bypass -File \"C:\\Scripts\\CreateEmbyIgnore.ps1\" -FolderPath \"%V\""

Сохраните это как AddEmbyIgnoreContextMenu.reg, и пользователи могут просто дважды щелкнуть его для установки контекстного меню.


Источники

  1. How add context menu item to Windows Explorer for folders - Stack Overflow
  2. Add PowerShell file (*.ps1) to New Context Menu of File Explorer - WinAero
  3. How to Add Custom Shortcuts to the Windows 11 or 10 Context Menu - Tom’s Hardware
  4. Adding right-click context menu items in Windows 10 - Klein Embedded
  5. Adding PowerShell command to right click menu both on and in a folder - Super User

Заключение

Создание элемента контекстного меню Windows, который генерирует файл .embyignore с динамическим содержимым, специфичным для папки, становится простым, как только вы понимаете интеграцию реестра и PowerShell. Ключевые шаги включают:

  1. Настройку структуры реестра под HKEY_CLASSES_ROOT\Directory\background\shell
  2. Создание скрипта PowerShell, который извлекает имя папки и генерирует соответствующее содержимое
  3. Интеграцию выполнения скрипта через ключ команды реестра
  4. Тестирование и обработку крайних случаев, таких как специальные символы

Этот подход обеспечивает бесшовный способ автоматизации создания файлов .embyignore для конфигурации медиасервера Emby, экономя ваше время и обеспечивая согласованность в структуре вашей медиатеки. Для развертывания на нескольких системах рассмотрите возможность использования метода файла .reg для легкой установки и удаления.