2013-10-03 7 views
9

Ho il seguente script:Come posso impedire al file batch di stampare il codice in esecuzione?

FOR %%i IN (1 2 3) DO (  
    IF %%i==1 ( 
     ECHO %%i 
    ) 
    IF %%i==2 ( 
     ECHO %%i 
    ) 
    IF %%i==3 ( 
     ECHO %%i 
    ) 
) 

Volevo solo stampare

1 
2 
3 

perché userò ancora una volta la stessa logica di scrivere un compito più completo ... io non sono un Ragazzo di Windows, e non ho idea di come farlo in batch. Invece che sto ricevendo:

c:\>FOR %i IN (1 2 3) DO (
IF %i == 1 (ECHO %i ) 
IF %i == 2 (ECHO %i ) 
IF %i == 3 (ECHO %i ) 
) 

c:\>(
IF 1 == 1 (ECHO 1 ) 
IF 1 == 2 (ECHO 1 ) 
IF 1 == 3 (ECHO 1 ) 
) 
1 

c:\>(
IF 2 == 1 (ECHO 2 ) 
IF 2 == 2 (ECHO 2 ) 
IF 2 == 3 (ECHO 2 ) 
) 
2 

c:\>(
IF 3 == 1 (ECHO 3 ) 
IF 3 == 2 (ECHO 3 ) 
IF 3 == 3 (ECHO 3 ) 
) 
3 
+0

Probabilmente stai cercando di eseguire il parsing dei file e quindi hai il comando '/ L', ma questa opzione non funziona in questo semplice caso. Se lo lasci fuori, ottieni '1 2 3' come previsto. – lurker

+0

@mbratch Modifica la mia domanda ... – cybertextron

risposta

24

Per evitare riecheggiando i comandi di Windows in uno script di shell, utilizzare @echo off:

@ECHO OFF 
FOR %%i IN (1 2 3) DO (  
    IF %%i==1 ( 
     ECHO %%i 
    ) 
    IF %%i==2 ( 
     ECHO %%i 
    ) 
    IF %%i==3 ( 
     ECHO %%i 
    ) 
) 

Nota precedente @ in echo off impedisce echo off da eco. Se non si dispone dello @, verrà visualizzato il prefisso echo off ma l'eco verrà disattivato dopo tale punto. Un comando shell preceduto da @ non viene echeggiato. Quindi è possibile utilizzare @ per impedire l'eco di singoli comandi.

Problemi correlati