我有一个批处理文件,询问要安装哪个程序,然后使用批处理文件指向该程序。其中有多个批处理文件,但只需要运行他们选择的文件即可。
我已经尝试过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,然后要求退出
答案 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 }}基础。