Пакетный файл не открывает правильный пункт меню, когда возвращается код ошибки - PullRequest
0 голосов
/ 31 марта 2019

Я написал командный файл, который получает данные от пользователя для открытия файла, а затем отображает меню. Затем от пользователя поступает запрос ввода с использованием файла .exe C, который я написал, и возвращает число, введенное пользователем, или «-1», если ввод не был числом. Независимо от того, какую опцию я использую, программа всегда открывает блокнот независимо от опции меню. Любая помощь будет отличной. Я включил код для командного файла и мой входной файл c.

Я проверил свою программу на C, и она, похоже, возвращает то, что должна, поэтому может возникнуть проблема с форматированием на стороне пакета. Я включил только для справки.

ФАЙЛ:

REM 1. Clear the screen
REM ------------------------------------------------------
cls


REM 2. Getting user input
REM ------------------------------------------------------

SET /p "FileToProcess=Please enter file(s) to process:" 

REM 3. Checking for file
REM ------------------------------------------------------
IF EXIST "%FileToProcess%" (
    cls
    :MENU
    ECHO 1. Open in Notepad
    ECHO 2. Open in Word
    ECHO 3. Open in Notepad ++
    ECHO 4. Print

    myChoice.exe
    )

    IF ERRORLEVEL 1 (
    cd C:\Windows
    notepad.exe %FileToProcess%
    GOTO END
    )

    IF ERRORLEVEL 2 (
    cd C:\Program Files (x86)\Microsoft Office\root\Office16
    WINWORD.EXE %FileToProcess%
    GOTO END
    )

    IF ERRORLEVEL 3 (
    cd C:\Program Files\Notepad++
    notepad++.exe %FileToProcess%
    GOTO END
    )

    IF ERRORLEVEL 4 (
    cd C:\Windows
    notepad.exe /P %FileToProcess%
    GOTO END
    )

    IF ERRORLEVEL -1 (

    ECHO Sorry your input was not accepted!
    pause
    GOTO MENU
    )
REM 4. Display error if no file found
REM -----------------------------------------------------
) ELSE (

    ECHO File does not exist!
    GOTO END

)


:END

C КОД ПРОГРАММЫ ВВОДА:

#include <stdio.h>
#include <string.h>

#pragma warning(disable:4996)
// main
int main(void)
{
    // variables
    int num;
    char userInput[10] = "";

    // requesting input
    printf("Please enter a menu option: ");
    fgets(userInput, 81, stdin);

    // checks input
    if (sscanf(userInput, "%d", &num) == 1)
    {
        return num;
    }
    else
    {
        return -1;
    }

    return 0;

}

1 Ответ

2 голосов
/ 31 марта 2019
@ECHO OFF
SETLOCAL

REM 1. Clear the screen
REM ------------------------------------------------------
cls

REM 2. Getting user input
REM ------------------------------------------------------

SET /p "FileToProcess=Please enter file to process:" || exit /b 0

REM Strip double quotes
SET "FileToProcess=%FileToProcess:"=%"

REM 3. Checking for file
REM ------------------------------------------------------
IF NOT EXIST "%FileToProcess%" goto :FileNotExist
cls

:MENU
ECHO 1. Open in Notepad
ECHO 2. Open in Word
ECHO 3. Open in Notepad ++
ECHO 4. Print

myChoice.exe

IF %ERRORLEVEL% equ 1 (
    cd /d "C:\Windows"
    notepad.exe "%FileToProcess%"
) ELSE IF %ERRORLEVEL% equ 2 (
    cd /d "C:\Program Files (x86)\Microsoft Office\root\Office16"
    WINWORD.EXE "%FileToProcess%"
) ELSE IF %ERRORLEVEL% equ 3 (
    cd /d "C:\Program Files\Notepad++"
    notepad++.exe "%FileToProcess%"
) ELSE IF %ERRORLEVEL% equ 4 (
    cd /d "C:\Windows"
    notepad.exe /P "%FileToProcess%"
) ELSE (
    ECHO Sorry your input was not accepted!
    pause
    GOTO MENU
)
exit /b 0

REM 4. Display error if no file found
REM -----------------------------------------------------
:FileNotExist
>&2 ECHO File does not exist!
exit /b 1
  • Пути с двойными кавычками.
  • Изменить IF EXIST "%FileToProcess%" ( на IF NOT EXIST "%FileToProcess%" goto :FileNotExist чтобы избежать необходимости быть большим блоком скобок.
  • Использование else if, чтобы избежать использования многочисленных goto :end
  • if errorlevel изменено на if %errorlevel% для фактического номер вместо числа и выше.
  • Удалена :end метка как ненужная.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...