Batch file 如何让批处理文件调用其他批处理文件,但只运行某些批处理文件
我有一个批处理文件,它询问要安装哪个程序,然后使用批处理文件指向该程序。其中有多个批处理文件,但只需要运行它们选择的一个 我试过GOTO,如果有其他方法,但没有一个有效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
@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:\,还有什么其他的可能性?