修改另一个批处理文件中的批处理文件

时间:2015-02-19 16:52:38

标签: batch-file echo

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

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"

1 个答案:

答案 0 :(得分:1)

以下是迁移工作的版本 - 它不会更改批处理文件...

<强> 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相关的数据。

请注意,我已将参考文献中提供的参数括在引号中,如果您愿意,可以使用空格(如“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

批处理读取文件,将第一个“标记”(分隔符“|”之前)放入%%a,将描述放入%%b。如果与提供的参数匹配(不区分大小写),则%%b中的描述部分为echo并且我们退出(请注意冒号 - :eof表示此批处理文件的结尾“)

然后你问问题,然后如果你想添加,请询问说明。我还为again添加了一个循环,以便回复既不是yes也不是no

请注意if语句中引号的使用 - 我们无法控制键入的内容,因此引用响应可在用户响应包含空格(保护不完整)的情况下提供一些保护。另一方也必须引用,因为两个字符串必须完全匹配。 然后echo数据文件的新项和描述 - 插入符号( ^ )告诉批处理管道是数据的一部分,而不是指令echo - 和{ {1}}。我选择返回标签pauses来读取文件中的响应。