2013-11-30 2 views
0

Я создал файл names.bat , который сделает папку с именем профили, а затем добавит пакет в папку профилей, чтобы просмотреть профили, и у меня возникла проблема с созданием программы veiwer.bat . Names.bat содержит этот код:Почему переменная исчезает?

@echo off 
TITLE Profiles 
SET /a YEAR=%DATE:~6,4% 
if not exist Profiles mkdir Profiles 
CD Profiles 
ECHO @echo off>"Profile Viewer.bat" 
ECHO :profile>>"Profile Viewer.bat" 
ECHO title Profile Viewer>>"Profile Viewer.bat" 
ECHO SET /P NAME=Search names:>>"Profile Viewer.bat" 
ECHO call %NAME%.bat>>"Profile Viewer.bat" 
ECHO goto profile>>"Profile Viewer.bat" 
GOTO RES 
:RES 
SET /P NAME=State your name: 
ECHO @echo off>%NAME%.txt 
ECHO title %NAME%>>%NAME%.txt 
ECHO echo Name:%NAME%>>%NAME%.txt 
SET /P AGE=State your Age: 
ECHO echo Age:%AGE%>>%NAME%.txt 
SET /a YOB=%YEAR%-%AGE% 
SET /P A=Where you born in %YOB%(Y/N) 
IF %A%==Y goto YES 
IF %A%==y goto YES 
IF %A%==N goto NO 
IF %A%==n goto NO 

:NO 
SET /P YOB=State your Year of birth: 
ECHO echo Birth Date:%YOB%>>%NAME%.txt 
goto CONTINUE 

:YES 
ECHO echo Birth Date:%YOB%>>%NAME%.txt 
goto CONTINUE 

:CONTINUE 
ECHO pause>>%NAME%.txt 
rename *.txt *.bat 
start %NAME%.bat 
%SystemRoot%\explorer.exe "C:\Users\%username%\Desktop\Profiles" 
echo Here is your profile 
pause 

поэтому я редактировать "Профиль Viewer.bat", чтобы увидеть, если он работает имеет этот

@echo off 
:profile 
title Profile Viewer 
SET /P NAME=Search names: 
call .bat 
goto profile 

Откуда% NAME переменной% идут? Я хочу, чтобы это было в профиле viewer.bat Я знаю его пустую переменную, я хочу, чтобы это буквально говорило в коде это;

@echo off 
:profile 
title Profile Viewer 
SET /P NAME=Search names: 
call %NAME%.bat 
goto profile 

Я знаю, что я мог бы сделать это сам, но я хочу name.bat, чтобы сделать это для меня

ответ

1
ECHO call %NAME%.bat>>"Profile Viewer.bat" 

Когда эта строка выполняется, переменная %NAME% расширяется. Поскольку он еще не определен, он расширяется до нуля. Таким образом, мы получаем ошибочную строку в Profile Viewer.bat.

Чтобы предотвратить расширение %NAME%, нам нужно сообщить интерпретатору команд, что мы хотим получить фактический % вместо запуска переменной. Таким образом, нам необходимо escape% примерно так:

ECHO call %%NAME%%.bat>>"Profile Viewer.bat" 
Смежные вопросы