为什么我的变量不正确扩大 [英] Why are my variables not expanding properly

查看:331
本文介绍了为什么我的变量不正确扩大的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的数据库上使用一个bat文件的我的变量不扩大以正确的方式工作。

编辑:

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

这是所有code的必需显示:

 组n = 0:1
回声。
集/ p = FNAME输入名字:
集/ p = LNAME输入姓:
集/ p VAL%N%=输入电子邮箱:
集/ p NUM%N%=输入电话号码:
集/对VAR%N%=输入服务号码:
集/ p DVICE%N%=输入设备:
服务集/ p dserv%N%=输入日期:
设置/ p SUMM%N%=输入服务概要:
@echo设置VAR%N%=!VAR%N%! > C:\\ Documents和Settings \\管理员\\桌面\\我的个人档案\\计算机刷新\\数据库\\%LNAME%的.bat
@echo设置VAL%N%=!VAL%N%! >> C:\\ Documents和Settings \\管理员\\桌面\\我的个人档案\\计算机刷新\\数据库\\%LNAME%的.bat
@echo设置FNAME =%FNAME%GT;> C:\\ Documents和Settings \\管理员\\桌面\\我的个人档案\\计算机刷新\\数据库\\%LNAME%的.bat
@echo设置LNAME =%LNAME%GT;> C:\\ Documents和Settings \\管理员\\桌面\\我的个人档案\\计算机刷新\\数据库\\%LNAME%的.bat
@echo设置DVICE%N%=!DVICE%N%! >> C:\\ Documents和Settings \\管理员\\桌面\\我的个人档案\\计算机刷新\\数据库\\%LNAME%的.bat
@echo设置dserv%N%=!dserv%N%! >> C:\\ Documents和Settings \\管理员\\桌面\\我的个人档案\\计算机刷新\\数据库\\%LNAME%的.bat
@echo设置SUMM%N%=!SUMM%N%! >> C:\\ Documents和Settings \\管理员\\桌面\\我的个人档案\\计算机刷新\\数据库\\%LNAME%的.bat
@echo设置NUM%N%=!NUM%N%! >> C:\\ Documents和Settings \\管理员\\桌面\\我的个人档案\\计算机刷新\\数据库\\%LNAME%的.bat
@echo设定N =%N%>> C:\\ Documents和Settings \\管理员\\桌面\\我的个人档案\\计算机刷新\\数据库\\%LNAME%的.bat
回声。
回声数据已经存储!
回声。
暂停> NUL
转到启动:2
回声。
回声姓是区分大小写的!
集/ p = LNAME请输入姓氏:
回声。
如果/我不存在C:\\ Documents和Settings \\管理员\\桌面\\我的个人档案\\计算机刷新\\数据库\\%LNAME%蝙蝠(转到错误)
所谓的C:\\ Documents和Settings \\管理员\\桌面\\我的个人档案\\计算机刷新\\数据库\\%LNAME%的.bat
回声名字:FNAME%%
回声姓:%LNAME%
回声设备:%!DVICE %% N%!
服务回声日期:dserv%N%!
回声。
回声电子邮件:VAL%N%!
回音!电话:NUM%N%!
回声。
回声摘要:
回声。
回音!SUMM%N%!
回声。
暂停> NUL
转到启动

这是我所有的工作。所述%LNAME%蝙蝠存储变量的问题var0 =变量的值是它不读var0。它读取!变种0!


解决方案

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET / A N = 0
::称之为C:\\ Documents和Settings \\管理员\\桌面\\我的个人档案\\计算机刷新\\数据库\\%LNAME%的.bat
:开始
拨打:plname
回声名字:FNAME%%
回声姓:%LNAME%
回声设备:%!DVICE %% N%!
服务回声日期:dserv%N%!
回声。
回声电子邮件:VAL%N%!
回音!电话:NUM%N%!
回声。
回声摘要:
回声。
回音!SUMM%N%!
回声。
SET / A N + = 1
IF%N%LSS页转到STARTGOTO:EOF:plname
SETFNAME =名字改为
SETLNAME =姓改为
SETdvice0 =设备零
SETdvice1 =设备一
SETdserv0 =日期零
SETdserv1 =日期一
SETval0 =电子邮件零
SETVAL1 =电子邮件one
SETNUM0 =电话零
SETNUM1 =电话一
SETsumm0 =摘要零
SETsumm1 =汇总一
GOTO:EOF

这一批证明你的code不工作。问题是你的%LNAME%的.bat 您还没有公布。你肯定不会设置了不同的%LNAME%的.bat 为每一个客户?

在发布一些真实的样本数据没有伤害 - 只是改变名称,保护有罪。修改真实姓名为布朗或绿色或罗宾逊。没有人看起来更加任何使用这些名字 - 他们显然是假的。

I am working on a database using a bat file an my variables are not expanding the right way.

Edit:

I have tried the above and have had no such luck.

This is all of the code necessary to show:

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

This is all I have to work with. The %lname%.bat stores variables as var0="value of variable" The problem is that it is not reading var0. It reads !var 0!.

解决方案

@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

This batch proves that your code does work. The problem is with your %lname%.bat which you haven't posted. Surely you don't set up a different %lname%.bat for each customer?

No harm in posting some real sample data - just change the names to protect the guilty. Modify the real names to "Brown" or "Green" or "Robinson." No-one appears to use those names any more - they're obviously fake.

这篇关于为什么我的变量不正确扩大的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆