Следующий пример должен 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
выше.