Меню выбора не выбирает правильные уровни ошибок - PullRequest
0 голосов
/ 05 марта 2020

У меня проблема с меню выбора, выполняющим правильный уровень ошибки. Мой пакетный файл переходит к первому элементу (A) и выполняет его независимо от того, какой выбор я выбрал с помощью клавиатуры в меню. В приведенном ниже примере, если я выберу 'C', тогда (IF "%ERRORLEVEL%" =="c" GOTO :c495) должно выполняться. Моя проблема в том, что (IF "%ERRORLEVEL%" =="a" GOTO :a299) выполняется независимо от того, какую клавишу я нажимаю. Может кто-нибудь сказать мне, что не так с моим командным файлом?

@echo off
    cls
        echo.
        echo          A   $2.99                 H   $4.99
        echo          B   $3.99                 I   $9.99
        echo          C   $4.95                 J  $14.95
        echo          D   $5.99                 K  $19.95
        echo          E   $6.99                 L  $29.95
        echo          F   $8.99                 M  $39.95
        echo          G   $9.95                 N  $49.95
        echo          ___________________________________
        echo.
        echo                   Press 'Q' to Quit


        echo.
        CHOICE /N /C:abcdefghijklmnq /M "  SELECT A LETTER "%1
    IF "%ERRORLEVEL%" =="q" GOTO :xEOF
    IF "%ERRORLEVEL%" =="n" GOTO :n4995
    IF "%ERRORLEVEL%" =="m" GOTO :m3995
    IF "%ERRORLEVEL%" =="l" GOTO :l2995
    IF "%ERRORLEVEL%" =="k" GOTO :k1995
    IF "%ERRORLEVEL%" =="j" GOTO :j1495
    IF "%ERRORLEVEL%" =="i" GOTO :i999
    IF "%ERRORLEVEL%" =="h" GOTO :h499
    IF "%ERRORLEVEL%" =="g" GOTO :g995
    IF "%ERRORLEVEL%" =="f" GOTO :f899
    IF "%ERRORLEVEL%" =="e" GOTO :e699
    IF "%ERRORLEVEL%" =="d" GOTO :d599
    IF "%ERRORLEVEL%" =="c" GOTO :c495
    IF "%ERRORLEVEL%" =="b" GOTO :b399
    IF "%ERRORLEVEL%" =="a" GOTO :a299



 :a299
IF NOT EXIST "*Cover (300 DPI).jpg" GOTO :NullFile
IF EXIST "*Cover (300 DPI).jpg" COPY "c:\Users\admin\Documents\ProgramData\Bin\Prices\3D Cover - 299.png" "blank12.png"
GOTO :Compile


 :b399
IF NOT EXIST "*Cover (300 DPI).jpg" GOTO :NullFile
IF EXIST "*Cover (300 DPI).jpg" COPY "c:\Users\admin\Documents\ProgramData\Bin\Prices\3D Cover - 399.png" "blank12.png"
GOTO :Compile

 :c495
IF NOT EXIST "*Cover (300 DPI).jpg" GOTO :NullFile
IF EXIST "*Cover (300 DPI).jpg" COPY "c:\Users\admin\Documents\ProgramData\Bin\Prices\3D Cover - 495.png" "blank12.png"
GOTO :Compile

 :d599
IF NOT EXIST "*Cover (300 DPI).jpg" GOTO :NullFile
IF EXIST "*Cover (300 DPI).jpg" COPY "c:\Users\admin\Documents\ProgramData\Bin\Prices\3D Cover - 599.png" "blank12.png"
GOTO :Compile

Код продолжается здесь, но с этого момента работает нормально. Спасибо.

Ответы [ 2 ]

1 голос
/ 06 марта 2020

Вот как я бы это сделал:

@echo off
    cls
        echo/
        echo          A   $2.99                 H   $4.99
        echo          B   $3.99                 I   $9.99
        echo          C   $4.95                 J  $14.95
        echo          D   $5.99                 K  $19.95
        echo          E   $6.99                 L  $29.95
        echo          F   $8.99                 M  $39.95
        echo          G   $9.95                 N  $49.95
        echo          ___________________________________
        echo/
        echo                   Press 'Q' to Quit


        echo/
        CHOICE /N /C:abcdefghijklmnq /M "  SELECT A LETTER "

    goto option-%errorlevel%


 :option-1  a299
ECHO a299
GOTO :EOF

IF NOT EXIST "*Cover (300 DPI).jpg" GOTO :NullFile
IF EXIST "*Cover (300 DPI).jpg" COPY "c:\Users\admin\Documents\ProgramData\Bin\Prices\3D Cover - 299.png" "blank12.png"
GOTO :Compile


 :option-2  b399
ECHO b399
GOTO :EOF

IF NOT EXIST "*Cover (300 DPI).jpg" GOTO :NullFile
IF EXIST "*Cover (300 DPI).jpg" COPY "c:\Users\admin\Documents\ProgramData\Bin\Prices\3D Cover - 399.png" "blank12.png"
GOTO :Compile

 :option-3  c495
ECHO c495
GOTO :EOF

IF NOT EXIST "*Cover (300 DPI).jpg" GOTO :NullFile
IF EXIST "*Cover (300 DPI).jpg" COPY "c:\Users\admin\Documents\ProgramData\Bin\Prices\3D Cover - 495.png" "blank12.png"
GOTO :Compile

 :option-14  n4995
ECHO n4995
GOTO :EOF

IF NOT EXIST "*Cover (300 DPI).jpg" GOTO :NullFile
IF EXIST "*Cover (300 DPI).jpg" COPY "c:\Users\admin\Documents\ProgramData\Bin\Prices\3D Cover - 599.png" "blank12.png"
GOTO :Compile

 :option-15  q
ECHO QUIT

PS - я не понимаю комментариев о "максимум 9 опциях в выбор команда". Выбор позволяет по возможности выбирать все цифры и буквы (прописные и строчные буквы могут отличаться) и некоторые специальные символы, поэтому он может иметь более 62 различных вариантов ...

... и много более простой метод:

@echo off
setlocal

set "list=299,399,495,599,699,899,995,499,999,1495,1995,2995,3995,4995" 

    cls
        echo/
        echo          A   $2.99                 H   $4.99
        echo          B   $3.99                 I   $9.99
        echo          C   $4.95                 J  $14.95
        echo          D   $5.99                 K  $19.95
        echo          E   $6.99                 L  $29.95
        echo          F   $8.99                 M  $39.95
        echo          G   $9.95                 N  $49.95
        echo          ___________________________________
        echo/
        echo                   Press 'Q' to Quit


        echo.
        CHOICE /N /C:abcdefghijklmnq /M "  SELECT A LETTER "

if %errorlevel% equ 15 goto :EOF

for /F "tokens=%errorlevel% delims=," %%a in ("%list%") do set "file=%%a"

echo File: "c:\Users\admin\Documents\ProgramData\Bin\Prices\3D Cover - %file%.png"
1 голос
/ 05 марта 2020

Наконец-то разобрался с ответом. Для этого потребовалось совершенно другое мышление:

@echo off
    cls
        echo.
        echo          1   $2.99                 A   $4.99
        echo          2   $3.99                 B   $9.99
        echo          3   $4.95                 C  $14.95
        echo          4   $5.99                 D  $19.95
        echo          5   $6.99                 E  $29.95
        echo          6   $8.99                 F  $39.95
        echo          7   $9.95                 G  $49.95
        echo          ___________________________________
        echo.
        echo                   Press 'Q' to Quit




@echo off
setlocal enabledelayedexpansion

set "list=299,399,495,599,699,899,995,499,999,1495,1995,2995,3995,4995,q" 
set "allchoices=1234567abcdefghijklmnopqABCDEFGHIJKLMNOPQ"
set count=0
for %%A in (%list%) do (
  rem call echo %%allchoices:~!count!,1%%: %%A
  set /a count+=1
  set "list[!count!]=%%A"
)
set "choices=!allchoices:~0,%count%!"
choice /cs /N /C:1234567abcdefgqABCDEFGQ /M "SELECT A LETTER: "
GoTo !list[%errorlevel%]!




 :299
ENDLOCAL
IF NOT EXIST "*Cover (300 DPI).jpg" GOTO :NullFile
IF EXIST "*Cover (300 DPI).jpg" COPY "c:\Users\admin\Documents\ProgramData\Bin\Prices\3D Cover - 299.png" "blank12.png"
GOTO :Compile



 :399
ENDLOCAL
IF NOT EXIST "*Cover (300 DPI).jpg" GOTO :NullFile
IF EXIST "*Cover (300 DPI).jpg" COPY "c:\Users\admin\Documents\ProgramData\Bin\Prices\3D Cover - 399.png" "blank12.png"
GOTO :Compile


 :495
ENDLOCAL
IF NOT EXIST "*Cover (300 DPI).jpg" GOTO :NullFile
IF EXIST "*Cover (300 DPI).jpg" COPY "c:\Users\admin\Documents\ProgramData\Bin\Prices\3D Cover - 495.png" "blank12.png"
GOTO :Compile


 :599
ENDLOCAL
IF NOT EXIST "*Cover (300 DPI).jpg" GOTO :NullFile
IF EXIST "*Cover (300 DPI).jpg" COPY "c:\Users\admin\Documents\ProgramData\Bin\Prices\3D Cover - 599.png" "blank12.png"
GOTO :Compile


 :699
ENDLOCAL
IF NOT EXIST "*Cover (300 DPI).jpg" GOTO :NullFile
IF EXIST "*Cover (300 DPI).jpg" COPY "c:\Users\admin\Documents\ProgramData\Bin\Prices\3D Cover - 699.png" "blank12.png"
GOTO :Compile

Спасибо всем за помощь.

...