Echo aus, aber Meldungen werden angezeigt

74

Ich habe das Echo in der Fledermausdatei ausgeschaltet.

@echo off

dann mache ich so etwas

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

und ich bekomme:

Das System kann den angegebenen Pfad nicht finden.

Nachricht zwischen diesen beiden Echos.

Was kann der Grund für diese Nachricht sein und warum ignoriert die Nachricht das Echo aus?

Aleksandr Kravets
quelle
Wenn der Pfad Leerzeichen enthält, wird er in Anführungszeichen gesetzt? wenn nichtif exist "%INSTALL_PATH%" (...
Alex K.
3
Warnungen werden angezeigt, auch wenn Sie Echo auf Aus gesetzt haben. @echo offDies bedeutet lediglich, dass keine Befehle an das Terminal zurückgegeben werden sollten.
Cyclonecode
Fügen Sie

Antworten:

115

Wie Mike Nakis sagte, echo offverhindert nur das Drucken von Befehlen, nicht Ergebnisse. Um das Ergebnis eines Befehls >nulauszublenden, fügen Sie am Ende der Zeile hinzu, und um Fehler auszublenden, fügen Sie hinzu 2>nul. Zum Beispiel:

Del /Q *.tmp >nul 2>nul

Wie Krister Andersson sagte, ist der Grund, warum Sie einen Fehler erhalten, dass Ihre Variable mit Leerzeichen erweitert wird:

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

Wird:

if exist C:\My App\Installer (

Was bedeutet:

Wenn "C: \ My" vorhanden ist, führen Sie "App \ Installer" mit "(" als Befehlszeilenargument aus.

Sie sehen den Fehler, weil Sie keinen Ordner mit dem Namen "App" haben. Setzen Sie Anführungszeichen um den Pfad, um diese Aufteilung zu verhindern.

Hand-E-Food
quelle
Ich habe% INSTALL_PATH% zitiert. Diese Nachricht verschwand. aber ich habe einen neuen Fehler. "(war zu diesem Zeitpunkt unerwartet." Ich werde eine andere Frage stellen. Danke!
Aleksandr Kravets
42

Speichern Sie diese als * .bat-Datei und sehen Sie Unterschiede

:: 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
Wakan Tanka
quelle
Ich bin nicht sicher, was Sie erreichen wollen, da die Frage die Antwort akzeptiert hat ...
Aleksandr Kravets
11
Nichts, nur eine andere Antwort. Vielleicht ist es klarer als eine akzeptierte Antwort an jemanden.
Wakan Tanka
10

"Echo aus" wird nicht ignoriert. "Echo aus" bedeutet, dass Sie nicht möchten, dass die Befehle wiedergegeben werden. Es sagt nichts über die Fehler aus, die durch die Befehle erzeugt werden.

Die Zeilen, die Sie uns gezeigt haben, sehen in Ordnung aus, daher ist das Problem wahrscheinlich nicht vorhanden. Bitte zeigen Sie uns weitere Zeilen. Bitte zeigen Sie uns auch den genauen Wert von INSTALL_PATH.

Mike Nakis
quelle
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;
)
Cyclonecode
quelle
1
Sie können die Variablen auch in Anführungszeichen setzen : IF EXIST "%INSTALL_PATH%".
Aphorie
Ich erwähne es nur, weil Sie manchmal an Variablen anhängen müssen und die Anführungszeichen als Teil des Werts dies schwieriger machen.
Aphorie
2
Außerdem willst du nicht die doppelten Backslashes ... das wird man tun , C:\etc etc\test.
Aphorie
4

Für mich wurde dieses Problem dadurch verursacht, dass das Dateicodierungsformat falsch war. Ich habe einen anderen Editor verwendet und er wurde so gespeichert, UTF-8-BOMdass die allererste Zeile, die ich hatte, @echo offaber ein versteckter Charakter war.

Also habe ich die Codierung in einfachen alten ANSIText geändert , und dann ist das Problem behoben.

David d C e Freitas
quelle