2014-02-17 62 views
0

我正在使用bat文件来处理数据库,我的变量没有正确扩展。为什么我的变量不能正确扩展

编辑:

我已经尝试了上述暂时还没有这样的运气。

这是必需的所有节目的代码:

set n=0 

:1 
echo. 
set /p fname=Enter First Name: 
set /p lname=Enter Last Name: 
set /p val%n%=Enter E-mail: 
set /p num%n%=Enter Phone Number: 
set /p var%n%=Enter Service Number: 
set /p dvice%n%=Enter Device: 
set /p dserv%n%=Enter Date Serviced: 
set /p summ%n%=Enter Summary of Service: 
@echo set var%n%=!var%n%! > "C:\Documents and Settings\Administrator\Desktop\My Personal Files\Computer Refresh\Database\%lname%.bat" 
@echo set val%n%=!val%n%! >> "C:\Documents and Settings\Administrator\Desktop\My Personal Files\Computer Refresh\Database\%lname%.bat" 
@echo set fname=%fname% >> "C:\Documents and Settings\Administrator\Desktop\My Personal Files\Computer Refresh\Database\%lname%.bat" 
@echo set lname=%lname% >> "C:\Documents and Settings\Administrator\Desktop\My Personal Files\Computer Refresh\Database\%lname%.bat" 
@echo set dvice%n%=!dvice%n%! >> "C:\Documents and Settings\Administrator\Desktop\My Personal Files\Computer Refresh\Database\%lname%.bat" 
@echo set dserv%n%=!dserv%n%! >> "C:\Documents and Settings\Administrator\Desktop\My Personal Files\Computer Refresh\Database\%lname%.bat" 
@echo set summ%n%=!summ%n%! >> "C:\Documents and Settings\Administrator\Desktop\My Personal Files\Computer Refresh\Database\%lname%.bat" 
@echo set num%n%=!num%n%! >> "C:\Documents and Settings\Administrator\Desktop\My Personal Files\Computer Refresh\Database\%lname%.bat" 
@echo set n=%n% >> "C:\Documents and Settings\Administrator\Desktop\My Personal Files\Computer Refresh\Database\%lname%.bat" 
echo. 
echo The data has been stored! 
echo. 
pause > nul 
goto start 

:2 
echo. 
echo LAST NAME IS CASE SENSITIVE! 
set /p lname=Please enter last name: 
echo. 
if /i not exist "C:\Documents and Settings\Administrator\Desktop\My Personal Files\Computer Refresh\Database\%lname%.bat" (goto Error) 
call "C:\Documents and Settings\Administrator\Desktop\My Personal Files\Computer Refresh\Database\%lname%.bat" 
echo First Name: %fname%  
echo Last Name: %lname% 
echo Device: !%dvice%%n%! 
echo Date of Service: !dserv%n%! 
echo. 
echo E-Mail: !val%n%! 
echo Phone: !num%n%! 
echo. 
echo Summary: 
echo. 
echo !summ%n%! 
echo. 
pause > nul 
goto start 

这是我所有的工作。 %lname%.bat将变量存储为var0 =“变量值”问题在于它不读取var0。它读取!var 0 !.

+0

您尚未提供足够的代码来诊断问题。也许问题是价值从未设置,否则由于ENDLOCAL或其他类似原因导致值丢失。尝试不带参数的'set'来查看所有已定义的变量。 – dbenham

+0

我实际上删除了代码,因为它使帖子冗长。变量设置为!var%n%!并正确存储。只是不能被阅读。 –

+0

我强烈建议您按照我的建议,并在代码的末尾放置'set'命令(不带参数)以列出所有当前定义的变量。我相信你会看到你的变量不再被定义。正如Magoo在他的回答中所表明的那样,问题出现在您未显示的早期代码中。 – dbenham

回答

0

调用脚本时,cmd的新实例正在运行。变量集仅适用于该实例。

set filepath=C:\Documents and Settings\Administrator\Desktop\My Personal Files\Computer Refresh\Database\%lname%.bat 
for /f "delims=" %%a in (%filepath%) do %%a 

通过%lname%.bat每一行这将循环和运行线作为命令 - 如果所有在%lname%.bat行的是那些组命令,这应该工作。

+0

它没有工作。我上面编辑了我的代码。我不确定我是否正确输入。 –

1
@ECHO OFF 
SETLOCAL ENABLEDELAYEDEXPANSION 
SET /a n=0 
:: call "C:\Documents and Settings\Administrator\Desktop\My Personal Files\Computer Refresh\Database\%lname%.bat" 
:start 
call :plname 
echo First Name: %fname%  
echo Last Name: %lname% 
echo Device: !%dvice%%n%! 
echo Date of Service: !dserv%n%! 
echo. 
echo E-Mail: !val%n%! 
echo Phone: !num%n%! 
echo. 
echo Summary: 
echo. 
echo !summ%n%! 
echo. 
SET /a n+=1 
IF %n% lss 2 goto START 

GOTO :EOF 

:plname 
SET "fname=First name read" 
SET "lname=Last name read" 
SET "dvice0=Device zero" 
SET "dvice1=Device one" 
SET "dserv0=Date zero" 
SET "dserv1=Date one" 
SET "val0=Email zero" 
SET "val1=Email one" 
SET "num0=Phone zero" 
SET "num1=Phone one" 
SET "summ0=Summary zero" 
SET "summ1=Summary one" 
GOTO :EOF 

这批证明你的代码确实有效。问题出在您的%lname%.bat,您尚未发布。当然,您不会为每个客户设置不同的%lname%.bat

发布一些实际样本数据没有任何伤害 - 只需更改名称以保护有罪。将实名修改为“Brown”或“Green”或“Robinson”。似乎没有人再使用这些名字 - 他们显然是假的。

+0

+1,但我个人知道一个布朗家族可能会对你的最后一句话不予理睬! Clark Kent,Lois Lane,John Doe,Jane Doe等可能是更好的赌注。 – dbenham

+0

我将在今晚晚些时候添加代码。 %lname%.bat适用于每个单独的客户。数据将有多个服务号码。关键在于让一个人在路上有几个服务号码和摘要。这将是一个我可以快速编辑的迷你数据库。 –

相关问题