Получить папку автозагрузки Windows из CMD с другим языком системы

Я пытаюсь получить местоположение папки автозагрузки Windows (10/11) в системе с французским языком.

Обычно я использую эту команду, чтобы получить местоположение папки:

set "startupFolder=%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup"
echo %startupFolder%

Но если системным языком является французский, путь к папке выглядит следующим образом:

"%APPDATA%\Microsoft\Windows\Menu Démarrer\Programmes\Démarrage"

Как я могу убедиться, что моя команда вернет местоположение папки автозагрузки на всех языках, а не только на английском или французском?

Пожалуйста, прочитайте мой ответ на пути к рабочему столу пользователя в пакетных файлах или ответ, указанный в этом ответе. Далее запустите в окне командной строки reg QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Use‌​r Shell Folders" /v Startup. Если вы возьмете мой код, замените все вхождения Desktop на Startup и используете вместо if not defined DesktopFolder set "DesktopFolder=%UserProfile%\Desktop" строку if not defined StartupFolder set "StartupFolder=%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup", у вас получится идеальный рабочий код.

Mofi 14.06.2024 07:16

Папка Startup всегда хранится в реестре Windows. Очень маловероятно, что последнее условие когда-либо будет истинным, что приведет к определению переменной окружения StartupFolder со стандартным английским путем. Эта строка предназначена только для наихудшего сценария сильно поврежденных ключей реестра User Shell Folders и Shell Folders с отсутствием Startup под обоими ключами, что еще не восстанавливается автоматически Windows, как это делается при следующем входе/входе пользователя с добавлением Startup по умолчанию, по крайней мере, под ключом Shell Folders.

Mofi 14.06.2024 07:27
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете получить местоположение из ветки реестра пользователей HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders под значением Startup.

Пример:

@Echo Off
SetLocal EnableExtensions

Set "UserBranch=HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"
Set "ShellFolder=Startup"

Set "%ShellFolder% = "
For /F "EOL=H Tokens=1-2,*" %%G In ('%SystemRoot%\System32\reg.exe Query "%UserBranch%" /V "%ShellFolder%" 2^>NUL') Do Set "%%G=%%I"
If Defined %ShellFolder% (Set %ShellFolder%) & Pause

Однако приведенный выше код не будет напрямую изменен для всех значений пользовательского ключа, например History, (из-за игнорирования End Of L строк, начинающихся с H), а также Local AppData, My Music, My Pictures, My Video и Start Menu (из-за на пробел в именах их значений). То же самое относится и к Common AppData, Common Desktop, Common Documents, Common Programs, Common Start Menu, Common Startup и Common Templates под машинным ключом HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders.

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

Пример:

@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion

Set "RootKey=HKEY_LOCAL_MACHINE"
Set "ShellFolder=Common Start Menu"

Set "Branch=\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"
Set "%ShellFolder: =_% = "
For /F "Tokens=1-2,*" %%G In ('%SystemRoot%\System32\reg.exe Query "%RootKey%%Branch%" /V "%ShellFolder%" 2^>NUL') Do (
    If "%%H" == "REG_EXPAND_SZ" (Set "%%G=%%I") Else (Set "_=%%I"
        SetLocal EnableDelayedExpansion
        For /F "Tokens=*" %%J In ("!_:*REG_EXPAND_SZ=!") Do EndLocal & Set "%ShellFolder: =_%=%%J"
    )
)
If Defined %ShellFolder: =_% (Set %ShellFolder: =_%) & Pause

Другие вопросы по теме