我正在尝试创建一个本质上是数据库的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
我试图单独发送变量并且完全没有工作。我在想这是因为我没有延迟扩展sytax正确。
非常感谢任何帮助!
答案 0 :(得分:0)
您的问题似乎在于生成批处理文件以填充变量...您只生成一行,它实际上并不为您需要的任何变量赋值。
尝试更改
@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
时仅在第一行使用它非常重要,这样用户就不会看到该命令被回显。