从另一个批处理文件修改一个批处理文件
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
中的描述部分被 echo
ed 并且我们退出(注意冒号 - :eof
表示 'end of this batch file')
然后你问问题,然后如果你想添加,要求描述。对于响应既不是 yes
也不是 no
.
的情况,我还添加了一个返回 again
的循环
请注意 if
语句中引号的使用 - 我们无法控制键入的内容,因此在用户响应包括 space (保护不完整)。另一边也必须被引用,因为两个字符串必须 完全 匹配。
然后 echo
数据文件的新项目和描述 - 插入符号 (^) 告诉批处理管道是数据的一部分,而不是指令 echo
- 和 pauses
。我选择 return 到标签 begin
来读取和来自文件的响应。
我正在尝试创建一个批处理文件来更新另一个批处理文件。这就是我得到的。
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
中的描述部分被 echo
ed 并且我们退出(注意冒号 - :eof
表示 'end of this batch file')
然后你问问题,然后如果你想添加,要求描述。对于响应既不是 yes
也不是 no
.
again
的循环
请注意 if
语句中引号的使用 - 我们无法控制键入的内容,因此在用户响应包括 space (保护不完整)。另一边也必须被引用,因为两个字符串必须 完全 匹配。
然后 echo
数据文件的新项目和描述 - 插入符号 (^) 告诉批处理管道是数据的一部分,而不是指令 echo
- 和 pauses
。我选择 return 到标签 begin
来读取和来自文件的响应。