itfritze
Goto Top

ECHO ist ausgeschaltet (OFF). bei Pfadausgabe

Es geht um folgendes Problem mit einer Batch Datei:

Batch-CODE:
@echo off
chcp 65001
setlocal

:: Überprüfen, ob ein Parameter übergeben wurde, ansonsten Standardwert verwenden
if "%~1"=="" (  
    set "targetDir=C:\0_Temp\Projects\240112_DeleteOldFiles\Test"  
    echo Kein Pfad angegeben. Verwende Standardpfad: 
    echo %targetDir%
) else (
    set "targetDir=%~1"  
    echo Angegebener Pfad: 
    echo %targetDir%
)
Die Ausgabe des Standardpfades sieht dann leider so aus:
Aktive Codepage: 65001.
Kein Pfad angegeben. Verwende Standardpfad:
ECHO ist ausgeschaltet (OFF).

Wo könnte das Problem liegen? Im weiteren Verlauf des Skripts prüft es alle Dateien, die im Ordner vorhanden sind.

Wie lässt sich am besten realisieren, dass es den Standardpfad ausgibt?

Content-ID: 71471210530

Url: https://administrator.de/contentid/71471210530

Ausgedruckt am: 22.11.2024 um 11:11 Uhr

colinardo
Lösung colinardo 23.01.2024 aktualisiert um 17:53:12 Uhr
Goto Top
Servus.
Als erstes: Bitte beachte doch unsere Netiquette. Merci.

Das so oft gesehene Missverständnis bei der Variablenverwendung ist schon so alt wie Batch face-smile.
Du setzt eine Variable innerhalb von Klammern () mit set. Da die Variablenersetzung vom Parser in Batch pro Zeile stattfindet und alle Befehle innerhalb von Klammern in einer Batch quasi eine Zeile sind , ist die Variable bei der Ausgabe innerhalb der Klammer dann leer. Wenn du Variablen innerhalb von Klammern auswerten und ausgeben willst benötigst du DelayedExpansion (Verzögerte Variablenerweiterung) (oder call set) und statt Prozentzeichen, Ausrufezeichen um die Variable innerhalb der Klammern zu verwenden.
@echo off &setlocal enabledelayedexpansion
chcp 65001 >nul

:: Überprüfen, ob ein Parameter übergeben wurde, ansonsten Standardwert verwenden
if "%~1"=="" (  
    set "targetDir=C:\0_Temp\Projects\240112_DeleteOldFiles\Test"  
    echo Kein Pfad angegeben. Verwende Standardpfad:
    echo.!targetDir!
) else (
    set "targetDir=%~1"  
    echo Angegebener Pfad:
    echo.!targetDir!
)

Wenn du dass Echo stattdessen außerhalb der Klammerung platzieren würdest bräuchtest du es dann bspw. auch nicht mehr.

@echo off &setlocal
chcp 65001 >nul

:: Überprüfen, ob ein Parameter übergeben wurde, ansonsten Standardwert verwenden
if "%~1"=="" (    
    set "targetDir=C:\0_Temp\Projects\240112_DeleteOldFiles\Test"    
    echo Kein Pfad angegeben. Verwende Standardpfad:
) else (
    set "targetDir=%~1"    
    echo Angegebener Pfad:
)
echo.%targetDir%
You see the difference ?face-wink

Mehr dazu kannst du in folgenden Beiträgen nachlesen:
Exkurs (verzögerte) Variablenerweiterung
https://ss64.com/nt/delayedexpansion.html

Grüße Uwe

p.s. der Punkt hinter dem echo. ist nur dafür da falls die Variable tatsächlich mal leer sein sollte und damit die obige Meldung (ECHO ist ausgeschaltet (OFF)) nicht ausgegeben wird. Da könnte stattdessen auch ein "(" sein, diese Zeichen werden aber nicht mit ausgeben.
ITfritze
ITfritze 23.01.2024 um 16:56:41 Uhr
Goto Top
Super Lösung, auf manche Sachen kommt man halt nicht, obwohl man nah dran ist. 😅

Danke dir!
Pjordorf
Pjordorf 23.01.2024 um 20:00:37 Uhr
Goto Top
Hallo,

Zitat von @ITfritze:
Super Lösung, auf manche Sachen kommt man halt nicht, obwohl man nah dran ist. 😅
Warst wohl noch in einer anderen Galaxy auf Urlaubface-smile Der erste Treffer von Gurgel seiner ca. 3.340.000 Treffer liefert dir auch ohne Abi, hochschulstudium, diplom und nasenbluten und ohne langwieriges Studium z.B. https://learn.microsoft.com/de-de/windows-server/administration/windows- ...
https://www.google.com/search?q=%40echo+off

Gruß,
Peter
ITfritze
ITfritze 23.01.2024 um 21:50:36 Uhr
Goto Top
Zitat von @Pjordorf:

Hallo,

Zitat von @ITfritze:
Super Lösung, auf manche Sachen kommt man halt nicht, obwohl man nah dran ist. 😅
Warst wohl noch in einer anderen Galaxy auf Urlaubface-smile Der erste Treffer von Gurgel seiner ca. 3.340.000 Treffer liefert dir auch ohne Abi, hochschulstudium, diplom und nasenbluten und ohne langwieriges Studium z.B. https://learn.microsoft.com/de-de/windows-server/administration/windows- ...
https://www.google.com/search?q=%40echo+off

Gruß,
Peter

Hi,

Zitat von @colinardo:

Servus.
Als erstes: Bitte beachte doch unsere Netiquette. Merci.