Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Вайрис
0 / 0 / 0
Регистрация: 08.11.2015
Сообщений: 45
Завершенные тесты: 1
#1

Доделать скрипт "Multi Select Menu"

28.07.2016, 09:11. Просмотров 268. Ответов 1
Метки нет (Все метки)

Здравствуйте!

Давайте сразу к делу. Недавно я нашёл код, от Multi Select Menu, написанный на Batch. Проблема в том, что он не закончен, и так, как я пишу скрипты на Batch в первый раз, мне сложно разобратся, что я делаю не так, прошу о помощи.

Вот код:

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
@echo off
setlocal EnableDelayedExpansion
 
set "getKeyMacro=powershell -noprofile "^
    while (-not (37..40+13).contains($x)) {^
        $x = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown').VirtualKeyCode^
    }^
    if ($x -eq 13) {^
    'enter'^
    }^
    ('left','up','right','down')[$x - 37]^
""
 
set "num=0"
for %%a in ("7zip"
            "7zip x64"
            "AdobeReader"
            "Far x64"
            "Far x86") do (
   set /A num+=1
   set "option!num!=0"
   set "option!num!name=%%~a"
)
set "maxOptions=%num%"
set "selected=1"
:select
cls
echo use ^<right^> arrow to continue, ^<up^> and ^<down^> to select, and ^<enter^> to toggle
FOR /L %%G IN (1,1,%maxOptions%) DO (
set "display=[ ]"
if !option%%G! equ 1 set "display=[x]"
if %%G equ !selected! set "display=^>!display!"
echo !display! !option%%Gname!
)
FOR /F "delims==" %%G IN ('%getKeyMacro%') DO set "key=%%G"
if "%key%"=="up" set /a "selected-=1"
if "%key%"=="down" set /a "selected+=1"
if %selected% lss 1 set "selected=1"
if %selected% gtr %maxOptions% set "selected=!%maxOptions%!"
if "%key%"=="enter" goto toggle
if "%key%"=="right" goto OK
goto select
 
:toggle
set /a "option%selected%+=1"
set /a "option%selected%=!option%selected%!%%2"
goto select
 
:OK
FOR /L %%G IN (1,1,%maxOptions%) DO (
if !option%%G! equ 1 (
call :logic "%%G"
)
)
pause
 
goto :eof
:logic
 
set "install=%~1"
if "%install%"=="1"(
   msiexec /i D:\Install\Software\7z920.msi /quiet /qn 
   echo executing %install%
   )
 
set "install=%~2"
if "%install%"=="2"(
   msiexec /i D:\Install\Software\7z920x64.msi /quiet /qn 
   echo executing %install%
   )
 
set "install=%~3"
if "%install%"=="3"(
   Start "D:\Install\Software\AdbeRdr11010_en_US"
   echo executing %install%
   )
 
set "install=%~4"
if "%install%"=="4"(
   msiexec /i D:\Install\Software\Far x64.msi /quiet /qn 
   echo executing %install%
   )
 
set "install=%~5"
if "%install%"=="5"(
   msiexec /i D:\Install\Software\Far x86.msi /quiet /qn 
   echo executing %install%
   )
Автор данного кода оставил заметку, что, чтобы закончить программу, нужно всего лишь написать пару простых If в :logic. Но как вы можете убедится сами, у меня нечего не получилось.

Вопрос:

1. Что такое, и для чего служит set "install=%~"
2. Что я не правильно написал в :logic?

P.S Я не русский так что не удивляйтесь что грамматика такая убогая.

Благодарю за ранее,
Вайрис
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2016, 09:11
Ответы с готовыми решениями:

Избавиться от сообщений "Файл не найден", "Системе не удается найти указанный путь", "Устройство не готово"
Здравствуйте. В батнике присутствует поиск файлов: for %%i in (c d e f g h i j...

Скрипт импорта СОС в хранилище "Промежуточные центры сертификации"
для проверки подписи в файле с выпиской из ЕГРЮЛ, загруженном с сайта ФНС,...

Скрипт "Утилита резервного копирования"
Создать bat с 2-мя параметрами. Первый - адрес каталога, второй - адрес...

for /f "delims=" %%b in ('dir !DirName! /b /s /a-d') do () жрёт символы "!" и "^"
Добрый день, коллеги. День сегодня убил, но так и не понял что делать, может...

"tokens=*" "съедает" одну строчку при обработке вывода результата выполнения команды ping :)
Друзья, нашел батничек для пинга узла и вывода инфо в файл, кое что подправил...

1
alpap
1416 / 1143 / 369
Регистрация: 26.04.2015
Сообщений: 4,033
28.07.2016, 20:06 #2
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
...
:logic
 set "install=%~1"
 if "%install%"=="1" (
  msiexec /i D:\Install\Software\7z920.msi /quiet /qn 
  echo executing %install%
 )
 
 if "%install%"=="2" (
  msiexec /i D:\Install\Software\7z920x64.msi /quiet /qn 
  echo executing %install%
 )
 
 if "%install%"=="3" (
  Start "" "D:\Install\Software\AdbeRdr11010_en_US"
  echo executing %install%
 )
 
 if "%install%"=="4" (
  msiexec /i "D:\Install\Software\Far x64.msi" /quiet /qn 
  echo executing %install%
 )
 
 if "%install%"=="5" (
  msiexec /i "D:\Install\Software\Far x86.msi" /quiet /qn 
  echo executing %install%
 )
.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2016, 20:06

Искать в файле из директории "base" строки, которые содержат строку из "list.ini" и отсеивать их
Здравствуйте. Имеется данный Batch: @ECHO off SETLOCAL EnableExtensions...

Поиск файлов с атрибутом "скрытый" ("hidden") на заданном дисковом томе с целью их дальнейшего удаления
Всем здравствуйте!!! Помогите пожалуйста создать батник. Задание: Поиск...

Установить для пользователя значение "FALSE" параметра "PasswordExpires" командой WMIC
wmic useraccount where &quot;name='имя_пользователя' &quot; set passwordexpires=false...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru