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

时间:2014-01-11 02:28:41

标签: 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%\

在“如果存在Save \%name%\(”。

1 个答案:

答案 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之后直接设置,并且具有在批处理终止时将环境恢复到其原始状态的优势。