Предисловие: прошло некоторое время с тех пор, как я создал пакетный файл, и я впервые использую этот сайт, поэтому, если я что-то упустил или забыл сделать, просто укажите на это, и я это исправлю.
Сегодня я решил вернуться к некоторым играм для DOS, и я хотел создать пакетный файл, который позволил бы мне добавить три строки текста, в основном строки mount->c:->.exe, которые вы обычно пишете вручную, к [autoexec ] раздел dosbox.conf.
После дня возни я, наконец, получил пакетный файл для работы с несколькими играми, warcraft2/DungeonMaster/LandsofLore, единственная проблема, с которой я столкнулся, заключается в том, что код отлично работает для трех упомянутых выше, но не для других. даже добавить в dosbox.conf.
(после небольшой «отладки» использовал warcraft1) Я поместил команды паузы после «set/p input» и в операторе if для war1 также в метке war1, в начале и в конце. единственная пауза, которая срабатывает, - это пауза при вводе set/p, поэтому код либо пропускает операторы If, либо я не знаю, что делаю.
Любые указатели на то, что я сделал неправильно, будут оценены. Код TL:DR работает для warcraft2 (ввод w), Lands of Lore (ввод l), мастера подземелий (ввод d), другие входы, похоже, либо завершаются сразу после ввода, либо отменяются до того, как он попадет в оператор IF.
@echo off
REM ask is currently not used
:ask
REM asks for input
echo Which game would you like to play?
echo ___________________________________________________________________________________________
echo [w]arcraft 2 - w[a]rcraft1 - [c]ivilization - d[u]ne 2 - [d]ungeon master
echo [l]ands of lore - [o]regontrail - [s]im ant - Wol[f]3D
echo -------------------------------------------------------------------------------------------
REM input variable
setlocal
SET /P INPUT=[]
REM check user input then go to selected game
IF /I "%INPUT%"=="w" (
goto war2
)
IF /I "%INPUT%"=="d" (
goto dungeon
)
IF /I "%INPUT%"=="l" (
goto land
)
IF /I "%INPUT%"=="a"(
goto war1
)
IF /I "%INPUT%"=="c"(
goto civ
)
IF /I "%INPUT%"=="u"(
goto dune2
)
IF /I "%INPUT%"=="o"(
goto trail
)
IF /I "%INPUT%"=="s"(
goto ant
)
IF /I "%INPUT%"=="f"(
goto wolf
)
REM appends text to the end of dosbox.conf,after the [autoexec]
REM then starts dosbox and ends the file.
:war1
ECHO mount -u c>>"F:\Programs\DOSBoxPortable\Data\settings\dosbox.conf"
ECHO mount c f:\DOSGames\war1\ -label warcraft1>>"F:\Programs\DOSBoxPortable\Data\settings\dosbox.conf"
ECHO c:>>"F:\Programs\DOSBoxPortable\Data\settings\dosbox.conf"
ECHO WAR>>"F:\Programs\DOSBoxPortable\Data\settings\dosbox.conf"
start F:\Programs\DOSBoxPortable\DOSBoxPortable.EXE
goto:EOF
:civ
ECHO mount -u c>>"F:\Programs\DOSBoxPortable\Data\settings\dosbox.conf"
ECHO mount c f:\DOSGames\civ\ -label Civ>>"F:\Programs\DOSBoxPortable\Data\settings\dosbox.conf"
ECHO c:>>"F:\Programs\DOSBoxPortable\Data\settings\dosbox.conf"
ECHO CIV>>"F:\Programs\DOSBoxPortable\Data\settings\dosbox.conf"
start F:\Programs\DOSBoxPortable\DOSBoxPortable.EXE
goto:EOF
:dune2
ECHO mount -u c>>"F:\Programs\DOSBoxPortable\Data\settings\dosbox.conf"
ECHO mount c f:\DOSGames\dun2\ -label Dune 2>>"F:\Programs\DOSBoxPortable\Data\settings\dosbox.conf"
ECHO c:>>"F:\Programs\DOSBoxPortable\Data\settings\dosbox.conf"
ECHO DUNE2>>"F:\Programs\DOSBoxPortable\Data\settings\dosbox.conf"
start F:\Programs\DOSBoxPortable\DOSBoxPortable.EXE
goto:EOF
:trail
ECHO mount -u c>>"F:\Programs\DOSBoxPortable\Data\settings\dosbox.conf"
ECHO mount c f:\DOSGames\oregontrail\ -label Oregon Trail>>"F:\Programs\DOSBoxPortable\Data\settings\dosbox.conf"
ECHO c:>>"F:\Programs\DOSBoxPortable\Data\settings\dosbox.conf"
ECHO OREGON>>"F:\Programs\DOSBoxPortable\Data\settings\dosbox.conf"
start F:\Programs\DOSBoxPortable\DOSBoxPortable.EXE
goto:EOF
:ant
ECHO mount -u c>>"F:\Programs\DOSBoxPortable\Data\settings\dosbox.conf"
ECHO mount c f:\DOSGames\simant\ -label Sim Ant>>"F:\Programs\DOSBoxPortable\Data\settings\dosbox.conf"
ECHO c:>>"F:\Programs\DOSBoxPortable\Data\settings\dosbox.conf"
ECHO SIMANT>>"F:\Programs\DOSBoxPortable\Data\settings\dosbox.conf"
start F:\Programs\DOSBoxPortable\DOSBoxPortable.EXE
goto:EOF
:wolf
ECHO mount -u c>>"F:\Programs\DOSBoxPortable\Data\settings\dosbox.conf"
ECHO mount c f:\DOSGames\WOLF3D\ -label Oregon Trail>>"F:\Programs\DOSBoxPortable\Data\settings\dosbox.conf"
ECHO c:>>"F:\Programs\DOSBoxPortable\Data\settings\dosbox.conf"
ECHO WOLFD3D>>"F:\Programs\DOSBoxPortable\Data\settings\dosbox.conf"
start F:\Programs\DOSBoxPortable\DOSBoxPortable.EXE
goto:EOF
:war2
ECHO mount -u c>>"F:\Programs\DOSBoxPortable\Data\settings\dosbox.conf"
ECHO mount c f:\DOSGames\war2\war2\ -label warcraft2>>"F:\Programs\DOSBoxPortable\Data\settings\dosbox.conf"
ECHO c:>>"F:\Programs\DOSBoxPortable\Data\settings\dosbox.conf"
ECHO war2>>"F:\Programs\DOSBoxPortable\Data\settings\dosbox.conf"
start F:\Programs\DOSBoxPortable\DOSBoxPortable.EXE
goto:EOF
:dungeon
ECHO mount -u c>>"F:\Programs\DOSBoxPortable\Data\settings\dosbox.conf"
ECHO mount c f:\DOSGames\DungeonMaster\ -t cdrom -label DungeonMaster>>"F:\Programs\DOSBoxPortable\Data\settings\dosbox.conf"
ECHO c:>>"F:\Programs\DOSBoxPortable\Data\settings\dosbox.conf"
ECHO dm>>"F:\Programs\DOSBoxPortable\Data\settings\dosbox.conf"
start F:\Programs\DOSBoxPortable\DOSBoxPortable.EXE
goto:EOF
:land
ECHO mount -u c>>"F:\Programs\DOSBoxPortable\Data\settings\dosbox.conf"
ECHO mount c f:\DOSGames\LoL\ -label lands>>"F:\Programs\DOSBoxPortable\Data\settings\dosbox.conf"
ECHO c:>>"F:\Programs\DOSBoxPortable\Data\settings\dosbox.conf"
ECHO lands>>"F:\Programs\DOSBoxPortable\Data\settings\dosbox.conf"
start F:\Programs\DOSBoxPortable\DOSBoxPortable.EXE
ECHO mount c f:\DOSGames\dun2\ -label Dune 2>>...
здесь 2 имеет особое значение. Когда он появляется непосредственно перед>>
, это означает добавление стандартного потока ошибок к данному файлу. - person Klitos Kyriacou   schedule 09.01.2016