2012-01-11 15 views
53

Apagué el eco en el archivo bat.Echo off pero se muestran los mensajes

@echo off 

luego hacer algo como esto

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

y me sale:

El sistema no puede encontrar la ruta especificada.

mensaje entre esos dos ecos.

¿Cuál puede ser el motivo de este mensaje y por qué el mensaje ignora el eco?

+0

Si la ruta tiene espacios, ¿se cita? if not 'if exist"% INSTALL_PATH% "(...' –

+2

Las advertencias se muestran incluso si está desactivado echo, '@echo off' solo significa que no se deben repetir los comandos en el terminal. – Cyclonecode

+0

Además de agregar comillas alrededor de la ruta, agregue un espacio antes de ( – dbenham

Respuesta

95

Como Mike Nakis dijo, echo off sólo evita la impresión de comandos, no de resultados. Para ocultar el resultado de un comando, agregue >nul al final de la línea y, para ocultar los errores, agregue 2>nul. Por ejemplo:

Del /Q *.tmp >nul 2>nul 

Como Krister Andersson Dicho esto, la razón por la que obtiene un error es la variable está expandiendo con espacios:

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

se convierte en:

if exist C:\My App\Installer (

Lo que significa:

Si existe "C: \ My", ejecute "Aplicación \ Instalar" er "con" ("como el argumento de la línea de comando.

Aparece el error porque no tiene una carpeta llamada "Aplicación". Ponga comillas alrededor de la ruta para evitar esta división.

+0

He anotado% INSTALL_PATH%. Ese mensaje desapareció, pero tengo un nuevo error. "(Fue inesperado en este momento." Voy a hacer otra pregunta. ¡Gracias! –

10

"echo off" no se ignora. "echo off" significa que no desea que los comandos se repitan, no dice nada sobre los errores producidos por los comandos.

Las líneas que nos mostró se ven bien, por lo que el problema probablemente no esté allí. Por lo tanto, muéstranos más líneas. Además, muéstranos el valor exacto de 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

También puede poner las comillas alrededor de la variable: 'IF EXIST"% INSTALL_PATH% '' – aphoria

+0

@aphoria - Jupp, eso funciona bien – Cyclonecode

+0

Solo lo menciono porque a veces es necesario adjuntar a la variable y tener las comillas como parte del valor lo hace más difícil. – aphoria

19

Guardar esto como * archivo .bat y ver las diferencias

:: 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 No estoy seguro de lo que está tratando de lograr, ya que la pregunta ha aceptado la respuesta ... –

+5

Nada, solo otra respuesta. Tal vez sea más claro que una respuesta aceptada. a alguien. –

+0

Espero que lo haga :) –

0

Para mí este problema fue causado por el formato de codificación de archivos a equivocarse. Utilicé otro editor y se guardó como UTF-8-BOM, así que la primera línea que tuve fue @echo off pero había un carácter oculto en el frente.

Así que cambié la codificación a simple texto viejo ANSI, y luego el problema desapareció.

Cuestiones relacionadas