从另一个批处理文件修改一个批处理文件

Modifying a batch file from another batch file

我正在尝试创建一个批处理文件来更新另一个批处理文件。这就是我得到的。

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"

这是一个可以正常工作的版本 - 它不会更改批处理文件...

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 相关的所有数据一起保存在我的机器上。

请注意,我已将提供给菜单批处理的参数用引号引起来,这样您就可以根据需要使用 spaces(如 "Filet mignon")

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

批量读取文件,将第一个"token"(分隔符“|”之前)放入%%a,将描述放入%%b。如果与提供的参数(不区分大小写)匹配,则 %%b 中的描述部分被 echoed 并且我们退出(注意冒号 - :eof 表示 'end of this batch file')

然后你问问题,然后如果你想添加,要求描述。对于响应既不是 yes 也不是 no.

的情况,我还添加了一个返回 again 的循环

请注意 if 语句中引号的使用 - 我们无法控制键入的内容,因此在用户响应包括 space (保护不完整)。另一边也必须被引用,因为两个字符串必须 完全 匹配。 然后 echo 数据文件的新项目和描述 - 插入符号 (^) 告诉批处理管道是数据的一部分,而不是指令 echo - 和 pauses。我选择 return 到标签 begin 来读取和来自文件的响应。