【问题标题】:Create a database within a bat file在 bat 文件中创建数据库
【发布时间】:2014-02-15 03:45:22
【问题描述】:

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

我尝试单独发送变量,但没有一个有效。我想这是因为我没有正确的延迟扩展语法。

非常感谢任何帮助!

【问题讨论】:

  • 您是否在存储数据或将其解析回存储文件中的变量时遇到问题?您的问题似乎在生成的批处理文件中......我会在几秒钟内发布答案。

标签: variables batch-file cmd


【解决方案1】:

您的问题似乎出在生成批处理文件以填充变量的位置...您只生成了一行,实际上并未将任何内容分配给您需要的任何变量。

尝试改变

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

【讨论】:

  • 我不敢相信它这么简单!我知道有一种方法,但我的大脑无法想象它是我们的。非常感谢你的方法完美!也感谢您的额外建议!
  • 没问题!很高兴我能帮忙:)
  • 如果您能帮助我解决另一个问题,我将不胜感激。我现在尝试将两个变量用作一个变量并且不起作用。我在这里问了另一个问题stackoverflow.com/questions/21820233/…
猜你喜欢
  • 2023-04-03
  • 1970-01-01
  • 2018-05-26
  • 1970-01-01
  • 2010-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多