我正在尝试创建一个更新另一个批处理文件的批处理文件。这就是我得到的。
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 :(得分: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
来读取文件中的响应。