2014-02-15 8 views
1

본질적으로 데이터베이스 인 박쥐 파일을 만들려고합니다. 하나의 기록에 묶여있는 정보를 입력하고 싶습니다. 내가 레코드를 입력 할 때, 할당 된 카드 번호로 레코드를 조회 할 수 있기를 원합니다. 변수가 제대로 저장되지 않아서 지금은 실제로 작동하지 않습니다. 내가 별도로 전부 변수를 보내려고하고 아무도 일하지 않은박쥐 파일 내에 데이터베이스 만들기

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가 정확하지 않기 때문에 그것이라고 생각하고 있습니다.

도움을 주신 분께 감사드립니다.

+0

데이터를 저장하는 데 문제가 있습니까? 아니면 저장된 파일의 변수로 구문 분석하는 데 문제가 있습니까? 귀하의 문제는 생성 된 배치 파일에있는 것 같습니다 ... 나는 대답을 초 단위로 게시 할 것입니다. – Ruslan

답변

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%! 

당신은 배치 파일, 하나 또는 다른 변수를 둘러싸 !% 모두 사용해서는 안 읽어 변경합니다. 대부분의 경우 %을 사용해야합니다. 코드 블록 (예 : 문의 결과 또는 for 루프의 본문) 내의 변수를 괄호로 묶어야하는 경우 !을 사용해야합니다.

좀 더 조언 :

  • 당신이 바로 @echo off 후, 파일의 시작 부분에 한 번만 setlocal delayedexpansion를 넣을 수 있습니다. 그러나, 당신은이 프로그램에서 (적어도, 적어도) 지연된 확장이 필요하지 않습니다. 지연 확장은 ! 기호로 변수에 액세스 할 수있게하는 데 사용되며 괄호로 묶인 여러 줄의 명령문 본문 내에서만 유용합니다. 그렇기 때문에 실제로 문제가 발생할 때까지는 다른 문제를 야기 할 수 있기 때문에 완전히 제거해야합니다.
  • @echo off을 호출 한 후에 어떤 명령에서나 "@"기호가 필요하지 않습니다 (그러나 아무 것도 손상시키지 않습니다). @ 기호는 단순히 앞에 오는 명령의 반향을 억제하지만, echo off을 호출하면 모든 명령이 기본적으로 음소거되므로 중복됩니다. 이러한 이유 때문에 @echo off을 호출 할 때 첫 번째 줄에만 사용하는 것이 중요하므로 사용자는 해당 명령이 표시되는 것을 보지 못합니다.
+1

나는 그게 그렇게 간단하다고 믿을 수 없다! 나는 방법이 있고 나의 두뇌가 그것을 이해할 수 없다는 것을 알고있었습니다.당신의 방법이 완벽하게 작동 해 주셔서 감사합니다! 또한 추가 조언을 주셔서 감사합니다! –

+0

괜찮습니다! 도움이 되었으면 다행 :) – Ruslan

+0

다른 문제로 도울 수 있다면 정말 고맙겠습니다. 나는 이제 두 변수를 하나의 변수로 사용하려고 노력 중이며 작동하지 않습니다. 나는 다른 질문을 여기에서 물었다. http://stackoverflow.com/questions/21820233/why-are-my-variables-not-expanding-properly –