Как объединить код if и else с помощью cmd? - PullRequest
0 голосов
/ 04 мая 2019

Я хотел создать оператор if и else для кода, представленного ниже.Код должен работать следующим образом: при запуске пакетного кода он выяснит, был ли путь записан в файле addon.cfg или нет.Если он еще не был записан, то командный файл запишет путь.Если путь присутствует, то он будет полностью удален.

Код пакета выглядит следующим образом:

@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 VARMA Scenery Designs 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%
start "" "%Dir%\Prepar3D.exe" "%args%"

Код if и else должен выглядеть примерно так:это:

if  addon == ""
   set args=-Configure: Category=Add-on Package, Operation=Add, FileLocation=ProgramData, Path=%cd%
else
   set args=-Configure: Category=Add-on Package, Operation=Remove, FileLocation=ProgramData, Path=%cd%

Но я не уверен, какие значения / коды должны быть внутри "" на if addon == ""

[Редактировать /]

Файл addon.cfg находится в C:\ProgramData\Lockheed Martin\Prepar3D v4.Пакетный файл будет искать файл addon.xml (этот файл будет содержать некоторые детали, из которых Prepar3D должен искать файлы пейзажа) в том же месте, где размещен пакетный файл.Поэтому в приведенном выше коде путь записывается как Path=%cd%.

Пример кода в файле addon.cfg:

[Package.0]
PATH=F:\Flight Simulators\Addon\Scenery Making Tools\WMKM Model\WMKM Airport Design\Melaka International Airport (WMKM)\P3D V4\Melaka International Airport (WMKM)
ACTIVE=true
REQUIRED=false

Пример кода в файле addon.xml:

<SimBase.Document Type="AddOnXml" version="4,0" id="add-on">
  <AddOn.Name>VARMA Scenery Designs-(WMKM) Melaka International Airport</AddOn.Name>
  <AddOn.Description>Scenery for (WMKM) Melaka International Airport by VARMA Scenery Designs</AddOn.Description>

  <!--
  add-on.xml will work "first read first in" such that the last component read will be on top.
  -->  

  <AddOn.Component>
    <Category>Scenery</Category>
    <Path>scenery</Path>
    <Name>VARMA Scenery Designs-WMKM scenery</Name>
  </AddOn.Component>

</SimBase.Document>

Вы можете сослаться здесь для деталей add-on configuration file с некоторыми примерами.

Ответы [ 2 ]

0 голосов
/ 14 июня 2019
@Echo Off
REM Batch Script for Prepar3D V4
REM Search for the installation path of Prepar3D v4 in registry
If Defined PROCESSOR_ARCHITEW6432 (
    Start "" /D "%__CD__%" "%SystemRoot%\SysNative\cmd.exe" /C "%~f0"&Exit /B)
SetLocal EnableExtensions DisableDelayedExpansion
Set "Key=HKLM\SOFTWARE\Lockheed Martin\Prepar3D v4"
Set "Val=SetupPath"
Set "Dir="
For /F "Tokens=2*" %%A In ('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 'Add' or 'Remove' the current Folder 'To' or 'From' the Addon Library (add-on.cfg)
find /c "%cd%" "C:\ProgramData\Lockheed Martin\Prepar3D v4\add-ons.cfg"
if %errorlevel% equ 1 goto notfound
echo found
Set args="-Configure: Category=Add-on Package, Operation=Remove, FileLocation=ProgramData, Path=%cd%"
goto done
:notfound
echo notfound
Set args="-Configure: Category=Add-on Package, Operation=Add, FileLocation=ProgramData, Path=%cd%"
goto done
:done
start "" "%Dir%\Prepar3D.exe" "%args%"
0 голосов
/ 04 мая 2019

Вот пример кода для вас:

@Echo Off
If Defined PROCESSOR_ARCHITEW6432 (
    Start "" /D "%__CD__%" "%SystemRoot%\SysNative\cmd.exe" /C "%~f0"&Exit /B)
SetLocal EnableExtensions DisableDelayedExpansion
Set "Key=HKLM\SOFTWARE\Lockheed Martin\Prepar3D v4"
Set "Val=SetupPath"
Set "Dir="
For /F "Tokens=2*" %%A In ('Reg Query "%Key%" /V "%Val%" 2^>Nul'
)Do Set "Dir=%%~B"
If Not Defined Dir GoTo :EOF
If "%Dir:~-1%"=="\" Set "Dir=%Dir:~,-1%"
Set "Cfg=Lockheed Martin\Prepar3D v4\add-ons.cfg"
Set "Pad=%~dp0"
Set "Pth=%Pad:~,-1%"
Set "Arg=-Configure: Category=Add-on Package, Path=%Pth:,=&comma;%"
Set "Act=Add"
Rem Enter your FileLocation below. [ProgramData|Local|Roaming]
Set "Lcn=ProgramData"
If /I "%Lcn%"=="ProgramData" Set "Cfg=%ProgramData%\%Cfg%"
If /I "%Lcn%"=="Local" Set "Cfg=%LocalAppData%\%Cfg%"
If /I "%Lcn%"=="Roaming" Set "Cfg=%AppData%\%Cfg%"
If Exist "%Cfg%" Find /I "PATH=%Pth%"<"%Cfg%">Nul&&Set "Act=Remove"
Set "Arg=%Arg%, FileLocation=%Lcn%, Operation=%Act%"
Start "" "%Dir%\Prepar3D.exe" "%Arg%"

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

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