2015-02-19 3 views
0

Я пытаюсь создать пакетный файл, который обновляет другой пакетный файл. Это то, что я получил.Изменение командного файла из другого пакетного файла

Waiter.bat

@echo off 
set /p Waiter="What would you like to eat? " 
Call Menu.bat %Waiter% 
Pause 

Menu.bat

@echo off 
if /i "%1=="Pizza echo "Cheesy goodness" 
if not "%1=="Pizza "goto Add    <---------------------------------- 
goto EOF                 |        
                      | 
:Add                  | 
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             | 
                      | 
:next                  |  
set /p Add1="What is %1? "             | 
echo >> "if /i "%1=%1" "echo %Add1" ----------------------------------------- 
pause 
goto EOF 

Как мне сделать это добавить новый пункт меню под

if /i "%1=="Pizza echo "Cheesy goodness" 
+0

Вы хотите окончательно изменить внешний файл или просто создать список параметров меню (и начать снова в следующий раз, когда запускается основная партия)? – Magoo

+0

@Magoo Я хочу, чтобы он постоянно менял его, поэтому, когда я вернусь к нему, скажем, через день, он запомнит его. Поэтому, даже если я оставлю командный файл, он сохраняет новые пункты меню навсегда. – Kit

+0

@Magoo Итак, да, я хочу, чтобы он постоянно менял внешний файл. – Kit

ответ

1

Вот версия, 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 для чтения и ответа из файла.

+0

Спасибо, что объяснил это мне, познакомил меня с множеством новых вещей и исправил свою проблему. – Kit

+0

Так что он записывает все пункты меню в файл q28612146.txt. Затем q28612146_Menu.bat выглядит в этом текстовом файле для пунктов меню правильно? – Kit

+0

Точно так ... – Magoo

Смежные вопросы