它说“(此时出乎意料的是”代码:
:new_game
set /p name=Enter your name:
if exist Save\%name%\ (
echo This save exists delete it?
set /p var=[Y,N]
if %var% == N (
goto new_game
) else (
del /Q Save\%name%\
)
)
md Save\%name%\
在“如果存在Save \%name%\(”。
答案 0 :(得分:5)
在块语句(a parenthesised series of statements)
中,解析整个块并执行然后。在执行块之前,块中的任何%var%
将被解析块时的变量值替换。
因此,IF (something) else (somethingelse)
将在遇到%variables%
时使用IF
的值执行。
因此,
if %var% == N (
被解释为
if == N (
这是解析器抱怨的内容。
两个问题:
首先,如果您输入的字符串为set/p
,则表示输入的数据不包含 Spaces 的sying。克服这个问题的方法是"enclose the srings on both sides of the comparison operator in quotes"
其次,由于您要有条件地输入var
字符串,您需要以不同方式构造代码(因此条目不会出现在代码块中)或使用delayed expansion
。< / p>
setlocal enabledelayedexpansion
将允许您使用语法if "!var!"=="whatever including spaces"
来访问块中{CURRENT}的var
值。它最好在@echo off
之后直接设置,并且具有在批处理终止时将环境恢复到其原始状态的优势。