Получение пути установки файла из реестра для приложения cmd - PullRequest
0 голосов
/ 28 апреля 2019

Я хотел, чтобы путь к установленному приложению был получен из реестра. Это код партии для вашей справки:

@echo off
REM Batch Script for Prepar3D V4
REM Add the current Folder to the Addon Library (add-on.cfg)

set args=-Configure: Category=Add-on Package, Operation=Add, FileLocation=ProgramData, Path=%cd%
call "D:\Lockheed Martin\Prepar3D v4\Prepar3D.exe" "%args%"

Я ожидаю, что местоположение "D: \ Lockheed Martin \ Prepar3D v4 \ Prepar3D.exe" будет получено из реестра.

1 Ответ

0 голосов
/ 28 апреля 2019

Следующий пример должен Set указать местоположение вашей конкретной программы, а также указанный вами ключ реестра и значение в переменной %Dir%:

@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion

Set "Key=HKLM\SOFTWARE\Lockheed Martin\Prepar3D v4"
Set "Val=SetupPath"

For %%A In (Cmd Reg)Do Set "%%A=%SystemRoot%\System32\%%A.exe"
If Defined PROCESSOR_ARCHITEW6432 Set "Cmd=%SystemRoot%\SysNative\cmd.exe"
Set "Dir="
For /F "Tokens=2*" %%A In ('
    ""%Cmd%" /D /C ""%Reg%" Query "%Key%" /V "%Val%" 2^>Nul""')Do Set "Dir=%%~B"
If Not Defined Dir GoTo :EOF
If "%Dir:~-1%"=="\" Set "Dir=%Dir:~,-1%"
Rem Your commands go below here.
Echo "%Dir%\Prepar3D.exe"&Pause

Я добавил пример командной строки внизу, чтобы, надеюсь, показать вам исполняемый файл с полным путем установки. Очевидно, вы бы заменили это требуемыми командами, но сначала обратите внимание на другие комментарии, которые вы получили первыми, , особенно из-за неправильного использования Call.

Обратите также внимание на то, что мне пришлось сделать некоторые предположения в моем ответе, потому что у меня нет системы, в которой я мог бы реплицировать вашу среду.

Поскольку v4 вашей программы предназначен только для x64 операционных систем, код проверяется только в реестре 64-bit. Он спроектирован таким образом, что будет проверять реестр 64-bit независимо от того, выполняется ли сценарий из 32 или 64 битового процесса.

[Редактировать /] В порядке любезности предоставив подтверждение того, что код работает должным образом, я решил опубликовать пример «ваших команд»:

Set "Pad=%~dp0"
Set "Arg=-Configure: Category=Add-on Package, Operation=Add"
Set "Arg=%Arg%, FileLocation=ProgramData, Path=%Pad:~,-1%"
Start "" "%Dir%\Prepar3D.exe" "%Arg%

Просто замените Echo "%Dir%\Prepar3D.exe"&Pause в моем верхнем коде на строки 4 выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...