2014-06-05 5 views
8

Sto provando a creare un codice che rileva se esiste una lettera di unità.Controllare se la lettera di unità esiste in batch, o goto un'altra parte di codice

Per esempio, per verificare se C: esiste unità il mio codice è:

@echo off 
title If Exist Test 

:main 
CLS 
echo. 
echo press any key to see if drive C:\ exists 
echo. 
pause>nul 
IF EXIST C:\ GOTO yes 
ELSE GOTO no 

:yes 
cls 
echo yes 
pause>nul 
exit 

:no 
cls 
pause>nul 
exit 

Ma non funziona, neanche va a: sì se C: esiste o le scarpe una schermata vuota se doesn' t. Cosa sto sbagliando, in modo che non vada a: no?

+0

funziona se si rimuove ELSE? –

risposta

5
@echo off 
title If Exist Test 

:main 
CLS 
echo. 
echo press any key to see if drive C:\ exists 
echo. 
pause>nul 
::NB: you need the brackets around the statement so that the file 
::knows that the GOTO is the only statement to run if the statement 
::evaluates to true, and the ELSE is separate to that. 
IF EXIST C:\ (GOTO yes) ELSE (GOTO no) 

::I added this to help you see where the code just runs on to the 
::next line instead of obeying your goto statements 
echo no man's land 

:yes 
::cls 
echo yes 
pause>nul 
exit 

:no 
::cls 
echo no 
pause>nul 
exit 
5

Il problema principale nel codice è la sintassi if ... else. Il comando completo deve essere letto/analizzato come un singolo blocco di codice. Ciò non significa che debba essere scritto in una sola riga, ma se non lo è, le linee devono contenere informazioni al parser in modo che conosce il comando continua sulla riga successiva

if exist c:\ (echo exists) else (echo does not exist) 

---- 

if exist c:\ (
    echo exists 
) else echo does not exist 

---- 

if exist c:\ (echo exists 
) else echo does not exist 

---- 

if exist c:\ (
    echo exists 
) else (
    echo does not exist 
) 

Qualsiasi dei codici precedenti funzionerà come previsto.

In ogni caso, il controllo della cartella radice dell'unità genera un popup per alcuni tipi di unità (nel mio caso era il lettore di schede multiple). Per evitare questo, utilizzare il comando vol e verificare la presenza di errorlevel

vol w: >nul 2>nul 
if errorlevel 1 (
    echo IT DOES NOT EXIST 
) else (
    echo IT EXISTS 
) 
-1

verificata a lavorare sotto Win7. Prova con una lettera di unità (esistente e non esistente) a scelta:

@IF EXIST O:\ (GOTO cont1) 
@ECHO not existing 
@GOTO end 

:cont1 
@ECHO existing! 

:end 
+0

Non riesco a vedere la differenza per le risposte di due anni. Ma questa risposta ha meno informazioni. – jeb

+0

È più semplice in termini di parentesi e letterale alla domanda dell'OP (titolo). –