Batch file 不';t在“退出”之后退出;退出“;命令

Batch file 不';t在“退出”之后退出;退出“;命令,batch-file,Batch File,我正在编程,我遇到了一个问题 if exist savefile.climax ( echo It appears you have one... echo Checking your data... ( set /p name= set /p level= )<savefile.climax ) else ( echo Oh man, you don't have one. echo Would you like to create it? choice /c yn /n /m "[Y]

我正在编程,我遇到了一个问题

if exist savefile.climax (
echo It appears you have one...
echo Checking your data...
(
set /p name=
set /p level=
)<savefile.climax
) else (
echo Oh man, you don't have one.
echo Would you like to create it?
choice /c yn /n /m "[Y]es or [N]o?"
if %errorlevel% == 1 goto creation
if %errorlevel% == 2 exit
)
如果存在savefile.climax(
如果你有一个。。。
回显检查您的数据。。。
(
集合/p名称=
设置/p级别=

) 您从未到达出口的原因是,您的
%errorlevel%
获取
并在代码块中使用,因此您需要
启用延迟扩展
。也就是说,您可以不使用它:

@echo off
if exist savefile.climax (
    echo It appears you have one...
    echo Checking your data...
    (
    set /p name=
    set /p level=
    )<savefile.climax
) else (
    echo Oh man, you don't have one.
    echo Would you like to create it?
    choice /c yn /n /m "[Y]es or [N]o?"
    if errorlevel 2 exit
    if errorlevel 1 goto creation
)
@echo关闭
如果存在savefile.climax(
如果你有一个。。。
回显检查您的数据。。。
(
集合/p名称=
设置/p级别=

) 我自己找到了解决办法。我把

if %errorlevel% == 1 goto creation
if %errorlevel% == 2 exit
在代码块之外,像这样

if exist savefile.climax (
echo It appears you have one...
echo Checking your data...
(
set /p name=
set /p level=
)<savefile.climax
) else (
echo Oh man, you don't have one.
echo Would you like to create it?
choice /c yn /n /m "[Y]es or [N]o?"
)

if %errorlevel% == 1 goto creation
if %errorlevel% == 2 exit
如果存在savefile.climax(
如果你有一个。。。
回显检查您的数据。。。
(
集合/p名称=
设置/p级别=

)不,在那里找不到答案。对我来说太复杂了。:/好吧,我现在就告诉你,如果你不了解变量在括号代码块中是如何工作的,你将很难编写批处理文件。这是我们大多数人在看到不懂这个概念的人时会想到的问题。你知道吗需要做的是使用此命令启用延迟扩展:
setlocal enabledelayedexpansion
,然后将
%errorlevel%
更改为
!errorlevel!
。下面是解决您还提供的代码更改的方法。@richh\y,另外请注意,
YN
选项的默认值,因此,您实际上不需要使用它的
/C
/N
/M
选项,
选项
本身就足够了。@Compo是的,我只是没有更改它来保留OP的默认代码,但值得一提。如果
错误级别
为0
,会发生什么情况?您真的希望在ode>如果
命令为真?这对我来说非常有效。@Compo-Uhmm..Choice将其数据存储在%errorlevel%上,并且它似乎是空的。@Squashman是的,我想这样做。我已经否决了你的答案,因为我和@Squashman都对上面的问题进行了评论。当前的另一个答案应该没有这些问题,它将是wrong允许将错误答案标记为已接受,而不向未来读者强调这一事实。