我正在尝试创建实际上是数据库的bat文件。我希望能够输入与单个记录相关的信息。输入记录时,我希望能够通过分配给它的卡号来查找记录。由于变量未正确存储,我现在拥有的代码实际上无法正常工作。
这是我的代码:
Color 5F
@echo off
:start
cls
echo ==========================================
echo Gift Card
echo ==========================================
echo.
echo What would you like to do?
echo.
echo 1 Add Card
echo 2 Check Information
echo 3 Edit Card Balance
echo 4 Delete Card
echo.
set /p choice=Please enter choice:
if /I %choice%==1 goto 1
if /I %choice%==2 goto 2
:1
echo.
set /p var=Enter Card Number:
set /p val=Enter Amount:
set /p fname=Enter First Name:
set /p lname=Enter Last Name:
set /p cbal=Enter Current Balance:
set /p diss=Enter Date issued:
@echo set %var%=%val%=%fname%=%lname%=%cbal%=%diss% > %var%.bat
echo.
echo The data has been stored!
pause
goto start
:2
echo.
set /p var=Please enter card number:
setlocal enabledelayedexpansion
call %var%.bat
echo !%fname%! !%lname%!'s !%var%! card has $!%cbal%! on it as of !%diss%!!
pause > nul
goto start
我试图分别单独发送变量,但没有一个起作用。我认为这是因为我没有正确的延迟扩展语法。
任何帮助都非常感谢!
您的问题似乎在于生成批处理文件以填充变量的位置……您仅生成一行,而实际上并没有为所需的任何变量分配任何内容。
尝试改变
@echo set %var%=%val%=%fname%=%lname%=%cbal%=%diss% > %var%.bat
成为
@echo set var=%var% > %var%.bat
@echo set val=%val% >> %var%.bat
@echo set fname=%fname% >> %var%.bat
@echo set lname=%lname% >> %var%.bat
@echo set cbal=%cbal% >> %var%.bat
@echo set diss=%diss% >> %var%.bat
这应该允许您的变量被正确加载回。
另外,改变
echo !%fname%! !%lname%!'s !%var%! card has $!%cbal%! on it as of !%diss%!!
阅读
echo %fname% %lname%'s %var% card has $%cbal% on it as of %diss%!
绝对不要在批处理文件中同时使用!
和%
包围变量,只能使用一个或另一个。%
在大多数情况下应使用;!
当您需要在多行“代码块”(例如,if
语句的结果或for
循环的主体)中读取一个用括号括起来的变量时,应使用。
更多建议:
setlocal delayedexpansion
在文件的开头放置一次,就在后面@echo off
。但是,您在此程序中没有做任何事情(至少现在还没有)需要延迟扩展。延迟扩展用于启用带!
符号的变量,并且仅在括号内的多行语句主体内有用。因此,除非/直到您真正需要它,否则您应该完全摆脱它,因为它可能导致其他问题。@echo off
(但它不会破坏任何内容)。该@
符号只是抑制了它前面的命令的回显,但是它是多余的,因为在您调用后默认情况下所有命令都处于静默状态echo off
。因此,重要的是仅在调用时在第一行使用它@echo off
,以使用户看不到该命令的回显。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句