2014-01-11 59 views
0

它說:「(在這個時候意外」的代碼:(在這個時候意外(如果存在的文件夾)

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

它是由在「是否存在保存\%名稱%\(」。

+1

嗯 - 一個小的錯字(shift-1和shift-backtick是相鄰的)。所需的字符是'!'而不是'〜'。這應該使它工作。不過請注意,你也可以使用'if/i ...'使'IF'不區分大小寫。由於'%name%'也可以包含空格,因此使用'if exists'save \%name%「' - 包含括號引號更安全。 – Magoo

回答

4

在一個塊內聲明(a parenthesised series of statements),該整個塊被解析並然後執行塊內的任%var%將由該變量的值的塊進行解析,時進行更換 - 執行塊之前。

因此,IF (something) else (somethingelse)將在遇到IF時使用值%variables%執行。

因此,

if %var% == N (

被解釋爲

if == N (

這是什麼解析器抱怨。

兩個問題:

首先,如果你是一個set/p輸入字符串,那麼就沒有sying所輸入的數據不包含空間。克服的辦法是"enclose the srings on both sides of the comparison operator in quotes"

其次,由於要有條件地進入var字符串,您可能需要不同的結構代碼(所以條目不代碼塊出現),或使用delayed expansion

​​

將允許您使用語法if "!var!"=="whatever including spaces"一個塊中訪問的var當前值。最好在@echo off之後直接設置,並且在批次終止時具有將環境恢復到原始狀態的優點。

+0

如果它是'If!var! == N(東西)'。 – Silly