在bat文件中创建数据库

时间:2014-02-15 03:45:22

标签: variables batch-file cmd

我正在尝试创建一个本质上是数据库的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正确。

非常感谢任何帮助!

1 个答案:

答案 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时仅在第一行使用它非常重要,这样用户就不会看到该命令被回显。