Вот версия, migt работы - он не меняет пакетный файл ...
menu.bat
@ECHO OFF
SETLOCAL
@echo off
set /p Waiter="What would you like to eat? "
Call q28612146_Menu.bat "%Waiter%"
Pause
GOTO :EOF
Примечание: пакетник называется просто q28612146_Menu.bat
для моего удобства. Вы называете это тем, что вам нравится - все данные, относящиеся к SO вопрос 28612146, вместе на моей машине.
Обратите внимание, что я заключен параметр, поставляемый в шихту меню в кавычках, который позволит вам использовать пробелы, если вам нравится (например, «филе миньон»)
q28612146_Menu.bat
@ECHO OFF
SETLOCAL
:begin
FOR /f "tokens=1*delims=|" %%a IN (q28612146.txt) DO IF /i "%%a"=="%~1" ECHO %%b&GOTO :EOF
:again
set /p Add="%~1 is not in our menu. Would you like to add it? "
if /i "%Add%"=="yes" goto next
if /i "%Add%"=="no" goto :EOF
GOTO again
:next
set /p Add1="What is %1? "
>>q28612146.txt echo %~1^|%Add1%
pause
GOTO begin
Я использовал файл с именем q28612146.txt
, содержащий эти данные для моего тестирования.
Pizza|Cheesy goodness
Пакетный считывает файл, поставив первый «маркер» (перед разделителем «|») в %%a
и описание в %%b
. Если есть совпадение с прилагаемого параметра (без учета регистра), то описание части в %%b
является echo
ред и мы закрываем (обратите внимание на двоеточие - «конец этого пакетного файла» :eof
средств)
Затем задают вопрос, то, если вы хотите добавить, попросите описание. Я также добавил цикл обратно к again
для случая, когда ответ не yes
, ни no
.
Обратите внимание на использование котировок в операциях if
- мы не можем контролировать то, что набрано, поэтому цитирование ответа дает некоторую защиту, если пользователь отвечает чем-то, включая пробел (защита не завершена). Другая сторона также должна быть указана, потому что две строки должны соответствовать точно. Затем echo
новый элемент и описание в файле данных - карет (^) сообщает партии, что труба является частью данных, а не инструкцией echo
- и pauses
. Я решил вернуться к метке begin
для чтения и ответа из файла.
Вы хотите окончательно изменить внешний файл или просто создать список параметров меню (и начать снова в следующий раз, когда запускается основная партия)? – Magoo
@Magoo Я хочу, чтобы он постоянно менял его, поэтому, когда я вернусь к нему, скажем, через день, он запомнит его. Поэтому, даже если я оставлю командный файл, он сохраняет новые пункты меню навсегда. – Kit
@Magoo Итак, да, я хочу, чтобы он постоянно менял внешний файл. – Kit