Как обрабатывать вложенные условия в пакетном режиме Windows - PullRequest
1 голос
/ 18 апреля 2019

У меня есть пакетный скрипт с несколькими if условиями.

  • Проверьте, существует ли папка C:\Apps\WorkingFolder\NewAppln.
    • Если его не существует, выполните .jar с сетевого диска, G:.
    • Если он существует, сравните файл CheckDate.log как на локальном, так и на сетевом диске.,
      • Если журналы совпадают, выполните .jar с сетевого диска, G:.
      • Если журналы отличаются, переименуйте существующие folder в folder_sysdate в локальном,и выполните .jar с сетевого диска, G:.

Вот мой код

@ echo on
SETLOCAL EnableDelayedExpansion
IF   EXIST  C:\Apps\Workingfolder\NewAppln\  (goto FOUND) else ( goto NOTFOUND)
:EOF

: FOUND
FC C:\Apps\Workingfolder\NewAppln\CheckDate.log   G:\Workingfolder\NewAppln\CheckDate.log | find "***">NUL
    (IF ERRORLEVEL 1 (GOTO SAME) ELSE (GOTO DIFFERENT)
    GOTO :EOF

    :SAME
    @"G:\JRE1.509\bin\java" -jar "loadApp.jar"
    START /D"C:\Apps\Workingfolder\NewAppln" MyApp.exe
    GOTO :EOF

    :DIFFERENT
    move C:\Apps\Workingfolder\NewAppln C:\Apps\Workingfolder\NewAppln_%time:~0,2%%time:~3,2%-%DATE:/=% 
    @"G:\JRE1.509\bin\java" -jar "loadApp.jar"
    START /D"C:\Apps\Workingfolder\NewAppln" MyApp.exe
    )
:EOF

:NOTFOUND
cd G:\Workingfolder\NewAppln_WIN10\
@"G:\JRE1.509\bin\java" -jar "loadApp.jar"
START /D"C:\Apps\Workingfolder\NewAppln" MyApp.exe

Ответы [ 2 ]

1 голос
/ 18 апреля 2019
@echo on
SETLOCAL EnableDelayedExpansion
IF EXIST "C:\Apps\Workingfolder\NewAppln\" (goto FOUND) else goto NOTFOUND
GOTO :EOF

: FOUND
FC "C:\Apps\Workingfolder\NewAppln\CheckDate.log" "G:\Workingfolder\NewAppln\CheckDate.log | find "***" >NUL
IF ERRORLEVEL 1 (GOTO SAME) ELSE GOTO DIFFERENT
GOTO :EOF

:SAME
@"G:\JRE1.509\bin\java" -jar "loadApp.jar"
START "" /D "C:\Apps\Workingfolder\NewAppln" MyApp.exe
GOTO :EOF

:DIFFERENT
move "C:\Apps\Workingfolder\NewAppln" "C:\Apps\Workingfolder\NewAppln_%time:~0,2%%time:~3,2%-%DATE:/=%"
@"G:\JRE1.509\bin\java" -jar "loadApp.jar"
START "" /D "C:\Apps\Workingfolder\NewAppln" MyApp.exe
GOTO :EOF

:NOTFOUND
cd "G:\Workingfolder\NewAppln_WIN10\"
@"G:\JRE1.509\bin\java" -jar "loadApp.jar"
START "" /D "C:\Apps\Workingfolder\NewAppln" MyApp.exe

Вы не создаете ярлыки с именем :EOF как goto, обрабатывает :EOF как E nd O f F ile .

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

Выполнена небольшая очистка и добавлено несколько двойных кавычек с некоторыми путями.

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

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

Немного переработал код. Хотя есть много возможностей для улучшения (особенно эти блоки с запуском Java).

@echo on
SETLOCAL EnableDelayedExpansion
IF EXIST C:\Apps\Workingfolder\NewAppln\ (
   FC C:\Apps\Workingfolder\NewAppln\CheckDate.log  G:\Workingfolder\NewAppln\CheckDate.log | find "***">NUL
   IF ERRORLEVEL 1 (
      @"G:\JRE1.509\bin\java" -jar "loadApp.jar"
      START /D"C:\Apps\Workingfolder\NewAppln" MyApp.exe
   ) else (
      move C:\Apps\Workingfolder\NewAppln C:\Apps\Workingfolder\NewAppln_%time:~0,2%%time:~3,2%-%DATE:/=% 
      @"G:\JRE1.509\bin\java" -jar "loadApp.jar"
      START /D"C:\Apps\Workingfolder\NewAppln" MyApp.exe
   )
) else (
   cd G:\Workingfolder\NewAppln_WIN10\
   @"G:\JRE1.509\bin\java" -jar "loadApp.jar"
   START /D"C:\Apps\Workingfolder\NewAppln" MyApp.exe
)

BTW NOTFOUND часть не будет работать должным образом, поскольку сценарий попадет туда, когда папка C:\Apps\Workingfolder\NewAppln не существует, но командная строка START /D"C:\Apps\Workingfolder\NewAppln" MyApp.exe явно использует ее.

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