2012-01-11 14 views
53

Ho disattivato l'eco nel file bat.Echo off ma vengono visualizzati i messaggi

@echo off 

poi fare qualcosa di simile

... 
echo %INSTALL_PATH% 
if exist %INSTALL_PATH%(
echo 222 
... 
) 

e ottengo:

Il sistema non riesce a trovare il percorso specificato.

messaggio tra questi due echi.

Quale può essere la ragione di questo messaggio e perché il messaggio ignora l'eco?

+0

Se il percorso ha spazi è quotato? se no 'if exist"% INSTALL_PATH% "(...' –

+2

Gli avvisi vengono visualizzati anche se si imposta echo su off, '@echo off' significa semplicemente che nessun comando deve essere ripetuto al terminale. – Cyclonecode

+0

Oltre ad aggiungere citazioni attorno al percorso, aggiungi uno spazio prima del ( – dbenham

risposta

95

Come Mike Nakis detto, echo off impedisce solo la stampa dei comandi, non risultati. Per nascondere il risultato di un comando aggiungi >nul alla fine della riga e per nascondere gli errori aggiungi 2>nul. Per esempio:

Del /Q *.tmp >nul 2>nul 

Come Krister Andersson detto, la ragione si ottiene un errore è la variabile si sta espandendo con spazi:

set INSTALL_PATH=C:\My App\Installer 
if exist %INSTALL_PATH% (

diventa:

if exist C:\My App\Installer (

Il che significa:

Se "C: \ My" esiste, eseguire "App \ Install er "con" ("come argomento della riga di comando.

Si vede l'errore perché non ci sono cartelle denominate "App". Metti le virgolette sul percorso per evitare che si spezzino.

+0

ho impostato% INSTALL_PATH%. Questo messaggio è scomparso, ma ho un nuovo errore. "(Era inatteso in questo momento." Farò un'altra domanda Grazie! –

10

"echo off" non viene ignorato. "echo off" significa che non vuoi che i comandi vengano echeggiati, non dice nulla sugli errori prodotti dai comandi.

Le linee che ci hai mostrato sembrano a posto, quindi probabilmente il problema non c'è. Quindi, per favore mostraci più linee. Inoltre, per favore mostraci il valore esatto di INSTALL_PATH.

4
@echo off 
// quote the path or else it won't work if there are spaces in the path 
SET INSTALL_PATH="c:\\etc etc\\test"; 
if exist %INSTALL_PATH% (
    // 
    echo 222; 
) 
+1

Puoi anche inserire le virgolette attorno alla variabile: 'SE ESISTA"% INSTALL_PATH% "'. – aphoria

+0

@aphoria - Jupp, che sarà lavoro bene. – Cyclonecode

+0

Lo menziono solo perché a volte è necessario aggiungere alla variabile e avere le virgolette come parte del valore rende più difficile – aphoria

19

Salva questo come * file .bat e vedere le differenze

:: print echo command and it's output 
echo 1 

:: does not print echo command just it's output 
@echo 2 

:: print dir command but not it's output 
dir > null 

:: does not print dir command nor it's output 
@dir c:\ > null 

:: does not print echo (and all other commands) but print it's output 
@echo off 
echo 3 

@echo on 
REM this comment will appear in console if echo off was not set 

@set /p pressedKey=Press any key to exit 
+0

I Non sono sicuro di cosa stai cercando di ottenere dal momento che la domanda ha accettato risposta ... –

+5

Niente, solo un'altra risposta. Forse sarà più chiaro di una risposta accettata a qualcuno –

+0

Spero che lo farà :) –

0

Per me questo problema è stato causato dal formato di codifica di file essere sbagliato. Ho usato un altro editor ed è stato salvato come UTF-8-BOM quindi la prima riga che avevo era @echo off ma c'era un carattere nascosto nella parte anteriore.

Così ho cambiato la codifica in semplice vecchio ANSI testo, e quindi il problema è andato via.

Problemi correlati