web-dev-qa-db-fra.com

Écho désactivé mais les messages sont affichés

J'ai désactivé echo dans le fichier chauve-souris.

@echo off

alors je fais quelque chose comme ça

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

et je reçois:

Le système ne peut pas trouver le chemin spécifié.

message entre ces deux échos.

Quelle peut être la raison de ce message et pourquoi le message ignore-t-il l'écho?

67
Aleksandr Kravets

Comme Mike Nakis a déclaré, echo off empêche uniquement l'impression des commandes, pas les résultats. Pour masquer le résultat d'une commande, ajoutez >nul à la fin de la ligne. Pour masquer les erreurs, ajoutez 2>nul. Par exemple:

Del /Q *.tmp >nul 2>nul

Comme Krister Andersson , la raison pour laquelle vous obtenez une erreur est que votre variable est en expansion avec des espaces:

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

Devient:

if exist C:\My App\Installer (

Ce qui signifie:

Si "C:\My" existe, exécutez "App\Installer" avec "(") comme argument de ligne de commande.

Vous voyez l'erreur car vous n'avez pas de dossier nommé "App". Placez des guillemets autour du chemin pour éviter ce fractionnement.

110
Hand-E-Food

Enregistrez ceci en tant que fichier * .bat et constatez les différences

:: print echo command and its output
echo 1

:: does not print echo command just its output
@echo 2

:: print dir command but not its output
dir > null

:: does not print dir command nor its output
@dir c:\ > null

:: does not print echo (and all other commands) but print its 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
35
Wakan Tanka

"echo off" n'est pas ignoré. "echo off" signifie que vous ne voulez pas que les commandes soient répercutées, cela ne dit rien sur les erreurs produites par les commandes.

Les lignes que vous nous avez montrées ont l'air correctes, alors le problème n'est probablement pas là. Alors, s'il vous plaît, montrez-nous plus de lignes. Veuillez également nous montrer la valeur exacte de INSTALL_PATH.

10
Mike Nakis
@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;
)
4
Cyclonecode

Pour moi, ce problème était dû au fait que le format de codage de fichier était incorrect. J'ai utilisé un autre éditeur et il a été enregistré sous le nom UTF-8-BOM de sorte que ma toute première ligne était @echo off, mais il y avait un caractère caché à l'avant.

J'ai donc modifié le codage en texte ancien ANSI, puis le problème a disparu.

3
David d C e Freitas