Вот командный файл с комментариями, которые представляют собой строки, начинающиеся с rem
:
@echo off
:UserPrompt
cls
rem Output the names of all batch files in subdirectory plugins in directory
rem of this batch file without file extension and next an empty line.
for /F "eol=| delims=" %%I in ('dir "%~dp0plugins\*.bat" /A /B 2^>nul') do echo %%~nI
echo/
rem Make sure the environment variable Load is not defined by chance
rem for example by a previous execution of this batch file in same
rem Windows command prompt window.
set "Load="
rem Prompt the user for the batch file name to load respectively execute.
set /P "Load=Which file do you want to load? "
rem Has the user input anything at all?
if not defined Load goto UserPrompt
rem Remove all double quotes from input string.
set "Load=%Load:"=%"
rem Is there anything left after removing all double quotes?
if not defined Load goto UserPrompt
rem Is there a batch file with user input name in subdirectory plugins
rem in the directory containing this batch file?
if exist "%~dp0plugins\%Load%.bat" goto StartPlugin
echo/
echo Error: The file name was typed wrong.
echo Please try it again.
echo/
pause
goto UserPrompt
:StartPlugin
cls
rem Start a separate command process for execution of the user selected
rem batch file with window title of console window set to name of batch
rem file and current directory set to subdirectory plugins of the
rem directory containing this batch file.
start "%Load%" /D"%~dp0plugins" ".\%Load%.bat"
pause
goto Terminal
:Terminal
Рекомендую прочитать в дополнение к комментариям:
Обратите внимание, что путь к каталогу, на который ссылается %~dp0
, всегда заканчивается обратной косой чертой, и, следовательно, конкатенация этого пути с именем каталога или файла должна выполняться без дополнительной обратной косой черты, как показано в коде выше, даже если это делает файл / Строки папок труднее читать.
Чтобы понять используемые команды и то, как они работают, откройте окно командной строки, выполните там следующие команды и полностью прочитайте все страницы справки, отображаемые для каждой команды.
cls /?
dir /?
echo /?
for /?
goto /?
if /?
pause /?
rem /?
set /?
start /?