Batch file 如何让批处理文件调用其他批处理文件,但只运行某些批处理文件

Batch file 如何让批处理文件调用其他批处理文件,但只运行某些批处理文件,batch-file,Batch File,我有一个批处理文件,它询问要安装哪个程序,然后使用批处理文件指向该程序。其中有多个批处理文件,但只需要运行它们选择的一个 我试过GOTO,如果有其他方法,但没有一个有效 @echo off SETLOCAL ENABLEDELAYEDEXPANSION set fs=\\ echo. if not defined ProgramFiles(x86) ( set comparch=Computer is 32-bit set progfile=%ProgramFiles% ) e

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

我试过GOTO,如果有其他方法,但没有一个有效

@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时,它会显示批处理文件mpinstall.bat,然后要求退出


我希望当他们选择c时,它会显示批处理文件Catinstall.bat,然后要求退出以解决您的问题,您只需要确保IF-ELSE语句格式正确,并且GOTO命令有用。如果您试图在用户发出exit命令之前循环安装选项,您可以这样构造它:

@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
set "dir=%cd:~0,2%"
if exist "%dir%\Program Files (x86)" (...etc.
我没有把你的代码放在块中,这样你就可以复制并粘贴到你自己的批中,从而了解它是如何工作的。基本上,您只需将这些字母替换为您自己的字母,将echo水果替换为call YOURBATCHFILE

除此之外,我将认真研究一下您当前正在尝试对主批处理文件执行的操作,看看哪些是真正必要的,哪些不是。例如:如果所有安装/用户输入选项都是相同的m、c和q,那么确定正在运行批处理的计算机的类型或位置有什么意义?你可以想怎么做就怎么做,但是如果你不打算用你收集的信息做任何事情,那么收集信息就没有意义了

大致了解您要完成的任务后,您可能只需要使用IF-ELSE块,让它们调用的批处理文件使用变量子字符串和cd处理驱动器号,如下所示:

@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
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是一个子例程,它将处理每个可用驱动器的安装演练。你可以做大量的选择和事情,但是你需要弄清楚你到底想要完成什么,以及你需要在你的基本IF基金会的基础上建立什么信息。
参考:,和

我可能有时间仔细梳理一下你的区块并给你一个答案,但乍一看:你设置了变量你从不使用fs,progfile,你在设置变量值之前使用变量驱动,你转到了在GOTO CATINSTALL之后已经存在的位置,只是代码的一般结构需要改进一下。谢谢,如果你能看一下的话。我还不是批处理文件的高手。我添加了GOTO,这样它就可以使用它,然后转到末尾。无论您的操作系统是32位的,它都会安装到32位程序文件目录吗?它应该查看它是32位还是64位,然后安装在%drive%:\program files x86\My Software\Testing\中,以及是否有多个驱动器带有程序文件子文件夹,是否要在每个驱动器上运行安装?除了C:\,还有什么其他的可能性?