它说"(此时出乎意料"的代码:
: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%\(".
在块语句中(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并具有在批次终止时将环境恢复到原始状态的优点.
| 归档时间: |
|
| 查看次数: |
2381 次 |
| 最近记录: |