2014-02-17 2 views
0

내 변수가 올바른 방법으로 확장되지 않는 박쥐 파일을 사용하여 데이터베이스에서 작업하고 있습니다.내 변수가 제대로 확장되지 않는 이유

편집 :

나는 위의 시도하고 그런 운이 없었다.

이 공연에 필요한 모든 코드입니다 :

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 = "variable of value"로 저장합니다. 문제는 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을 설정하지 않습니까?

실제 샘플 데이터를 게시 할 때 아무런 해가 없습니다 - 유죄를 보호하기 위해 이름을 변경하십시오. 실명을 "갈색"또는 "녹색"또는 "로빈슨"으로 수정하십시오. 아무도 그 이름을 더 이상 사용하지 않는 것처럼 보입니다. 분명히 가짜입니다.

+0

+1,하지만 저는 개인적으로 당신의 마지막 문장을 예외로하는 브라운 가정을 알고 있습니다! Clark Kent, Lois Lane, John Doe, Jane Doe 등이 더 나은 선택 일 수 있습니다. – dbenham

+0

오늘 밤에 나중에 코드를 추가하겠습니다. % lname % .bat는 개별 고객을위한 것입니다. 데이터에는 여러 서비스 번호가 있습니다. 이 열쇠는 길을 따라 한 사람에게 여러 서비스 번호와 요약 정보를 제공하는 것입니다. 이것은 내가 편집 할 수있는 미니 데이터베이스가 될 것입니다. –

관련 문제