如何获取批处理文件以调用其他批处理文件,但仅运行某些批处理文件

时间:2019-07-08 16:57:34

标签: batch-file

我有一个批处理文件,询问要安装哪个程序,然后使用批处理文件指向该程序。其中有多个批处理文件,但只需要运行他们选择的文件即可。

我已经尝试过GOTO和IF ELSE,但没有一个工作。

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set fs=\\
 echo.
  if not defined ProgramFiles(x86) (
  set comparch=Computer is 32-bit
  set progfile=%ProgramFiles%
  ) else (
  set comparch=Computer is 64-bit
  set progfile=%ProgramFiles(x86)%
  )
  echo %comparch%
:: FINDS VAST ON ANY DRIVE
for %%d in (c d e f g h i j k l m n o p q r s t u v w x y z) do (
  if exist "%drive%:\Program Files (x86)\My Software\Testing\" (
    set drive=%%d
  )
)

if exist "%drive%:Program Files (x86)\My Software\Testing\Test.exe" (
    ECHO Office location
    set sqlinst=OFFICE
) else (
    ECHO Shop location
    set sqlinst=POS
)

echo.
echo Requirements:
echo       1. Please confirm the above information before continuing
echo.
pause
CLS
REM shows setup options
:setupask
Echo =============================================
echo     SHORTCUT SETUP 
Echo =============================================
if "%sqlinst%" == "OFFICE" (
    if "!concomphier!" == "y" (
        ECHO     m = MPI
        ECHO     c = Cat
        ECHO     q = Quit
    ) else (
        ECHO     m = MPI
        ECHO     c = Cat
        ECHO     q = Quit
    )
) else (
    if "!concomphier!" == "y" (
    :: if computer is a workstation display the following
        ECHO     m = MPI
        ECHO     c = Cat
        ECHO     q = Quit
    ) else (
    :: if computer is a server display the following
        ECHO     m = MPI
        ECHO     c = Cat
        ECHO     q = Quit
    )
)
ECHO. 
ECHO NOTE: Once you place input in this step everything else is automated!
Echo =============================================

set /p shortcut_install="Which setup would you like to run?: "
ECHO.
if "%shortcut_install%" == "m"
call %~dp0MPIInstall.bat
GOTO END

if "%shortcut_install%" == "c"
(
GOTO CATINSTALL
::CATINSTALL
call %~dp0CatInstall.bat
GOTO END
)
) else if "%shortcut_install%" == "q" (
    CLS
    EXIT /B 0
)
::END
ECHO %prognameshort% shortcut creation complete!!
ECHO.
Timeout /t 1 /nobreak >nul
CLS
goto setupask
pause

我希望他们选择m时,它将调出批处理文件MPIInstall.bat,然后要求退出

我希望他们选择c时,它将弹出批处理文件Catinstall.bat,然后要求退出

1 个答案:

答案 0 :(得分:0)

要解决您的问题,只需要确保IF ELSE语句的格式正确,并且GOTO命令是有用的。如果您尝试循环浏览安装选项,直到用户给出退出命令,您将采用以下结构:

@echo off

:TRYAGAIN
set /p input="Enter A B or C: "
if /i %input% == A (
    echo APPLE
    ) else (
        if /i %input% == B (
        echo BANANA
        ) else (
            if /i %input% == C (
            echo CLEMENTINE
            ) else (
            echo WE JUST CAN'T HAVE NICE THINGS
            pause
            exit
        )
    )
)
GOTO TRYAGAIN

我没有将代码放在块中,因此您可以将其复制并粘贴到自己的批处理中,以了解其工作原理。本质上,您只需将字母替换为自己的字母,将echo FRUIT替换为call YOURBATCHFILE

除此之外,我将认真查看您当前正在尝试使用的主批处理文件,并查看实际需要什么和不需要什么。例如:如果您所有的安装/用户输入选项都相同( m c q ),那么确定点是什么呢?运行批处理的计算机的类型或位置?您可以根据需要将其设置为精美/复杂,但是如果您不打算对所收集的信息进行任何操作,则没有必要收集。

大致了解您要完成的工作,可以通过 just IF ELSE块并让他们调用的批处理文件使用以下命令来处理驱动器号:变量子字符串和cd,如下所示:

set "dir=%cd:~0,2%"
if exist "%dir%\Program Files (x86)" (...etc.

但是,如果您真的想梳理可用的驱动器,则可以使用这样的块,并在您的心脏内容中添加/删除字母:

setlocal enabledelayedexpansion
for %%A in (C: D: E:) do (
    if exist "%%A\Program Files (x86)" (
        echo %%A Drive is 64-bit
        set "dir=%%A\Program Files (x86)\My Software\Testing"
        call :install %%A
    ) else (
        if exist "%%A\Program Files" (
        echo echo %%A Drive is 32-bit
        set "dir=%%A\Program Files\My Software\Testing"
        call :install %%A
        )
    )
)

:install

其中:install是一个子例程,它将处理每个可用驱动器的安装演练。您可以做很多选择和事情,但是您需要准确地找出要完成的工作以及在基本{{1 }}基础。

参考:IFvariable substringCall