(此时出乎意料(如果存在文件夹)

Sil*_*lly 1 batch-file

它说"(此时出乎意料"的代码:

: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%\
Run Code Online (Sandbox Code Playgroud)

它出现在"如果存在Save \%name%\(".

Mag*_*goo 5

在块语句中(a parenthesised series of statements),整个块被解析然后执行.%var%块中的任何内容都将在解析块时 - 在块执行之前由该变量的值替换.

因此,IF (something) else (somethingelse)将使用遇到%variables%时的值来执行IF.

所以,

if %var% == N (
Run Code Online (Sandbox Code Playgroud)

被解释为

if  == N (
Run Code Online (Sandbox Code Playgroud)

这就是解析器所抱怨的.

两个问题:

首先,如果您输入带有a的字符串set/p,则表示输入的数据不包含sying Spaces.克服这种情况的方法是"enclose the srings on both sides of the comparison operator in quotes"

其次,由于您想要var有条件地输入字符串,您需要以不同方式构造代码(因此条目不会出现在代码块中)或使用delayed expansion.

setlocal enabledelayedexpansion
Run Code Online (Sandbox Code Playgroud)

将允许您使用语法if "!var!"=="whatever including spaces"来访问var块内的CURRENT值.它最好直接设置,@echo off并具有在批次终止时将环境恢复到原始状态的优点.