Member 14864964 Ответов: 2

Разрешение множественного выбора в пакетном режиме


В следующем пакетном скрипте я хотел бы иметь возможность вводить несколько вариантов одновременно из меню. Например, выбор 1, 3 и 5.

И сделайте так, чтобы аргумент /LOADFILES принимал только один элемент за раз, используя цикл :
@echo off 
setlocal 
set "loadfiles="
:AddSamples
cls
echo current loadfiles: %loadfiles:~1%
echo add sample number
echo 1 - Sample_01
echo 2 - Sample_02
echo 3 - Sample_03
echo 4 - Sample_04
echo 5 - Sample_05
echo A - All and Go
echo G - Done and Go
choice /c 12345AG /m "What is your choice? "
if %errorlevel% == 1 set "loadfiles=%loadfiles%;Sample_01.mp3
if %errorlevel% == 2 set "loadfiles=%loadfiles%;Sample_02.mp3
if %errorlevel% == 3 set "loadfiles=%loadfiles%;Sample_03.mp3
if %errorlevel% == 4 set "loadfiles=%loadfiles%;Sample_04.mp3
if %errorlevel% == 5 set "loadfiles=%loadfiles%;Sample_05.mp3
if %errorlevel% == 6 set "loadfiles=;Sample_01.mp3;Sample_02.mp3;Sample_03.mp3;Sample_04.mp3;Sample_05.mp3" & goto :continue
if %errorlevel% == 7 goto :continue
goto :AddSamples
:Continue
set "loadfiles=%loadfiles:~1%"
"%SystemDrive%\software\Viewer.exe" /LOADFILES=%loadfiles%


Что я уже пробовал:

У меня нет конкретного представления о том, как этого добиться.
Любая помощь очень помогла бы мне улучшить мой сценарий.
Спасибо.

2 Ответов

Рейтинг:
16

Richard MacCutchan

Вам нужно использовать set и for команды для получения и анализа значений. Следующий пример просто повторяет их обратно на консоль, но должен дать вам идею.

set /P choice=What are your choices?
echo %choices%
for %%i in (%choices%) do echo %%i

Обратите внимание, что ответ должен содержать значения, разделенные пробелами, например "1 3 6" .


Рейтинг:
1

It_Wasn't_Me

Что-то очень похожее я сделал некоторое время назад, ниже приведена адаптация / слияние с вашим кодом, а также использование для...

это строка

%errorlevel% == 1
а это уже интонация
%errorlevel% EQU 1


@echo off && setlocal enabledelayedexpansion

echo; & set _loadfiles=<nul
set "_Viewer=%SystemDrive%\software\Viewer.exe"
set "_msn_error=This option is not yet valid..."

:AddSamples
cls & color 0A & echo=
     
if defined _loadfiles (

     echo\ Current loadfiles: ^| !_loadfiles:;= ^|! ) 
	
echo\ Add sample number & echo\
     
for /L %%i in (1 1 6)do if %%~i equ 6 ( 
      
    echo\  A - All and Go 
    echo\  G - Done and Go & echo\
     
    )else <con: echo\  %%~i - Sample_0%%~i 
     
choice /c 12345AG /m "What is your choice? " 
          
    if !errorlevel! equ 6 (
         
        for /L %%i in (1 1 5)do set "_loadfiles=Sample_0%%i.mp3;!_loadfiles!"
		goto=:Continue
       
    )else if !errorlevel! leq 5  (
	     
	    set "_loadfiles=!_loadfiles!Sample_0!errorlevel!.mp3;"
		goto=:AddSamples
          
    )else if !errorlevel! equ 7 if not defined _loadfiles (
             
            color F4 & set /p "'=%_msn_error%" & goto=:AddSamples
			 
			)else echo\ & goto=:Continue

:Continue
"!_Viewer!" /LOADFILES=!_loadfiles:~0,-1!

rem :: more code here...
%__APPDIR__%timeout.exe -1 & endlocal & goto=:EOF