ECHO ist ausgeschaltet (OFF). bei Pfadausgabe
Es geht um folgendes Problem mit einer Batch Datei:
Batch-CODE:
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?
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%
)
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?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 71471210530
Url: https://administrator.de/contentid/71471210530
Ausgedruckt am: 22.11.2024 um 11:11 Uhr
4 Kommentare
Neuester Kommentar
Servus.
Als erstes: Bitte beachte doch unsere Netiquette. Merci.
Das so oft gesehene Missverständnis bei der Variablenverwendung ist schon so alt wie Batch .
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.
Wenn du dass Echo stattdessen außerhalb der Klammerung platzieren würdest bräuchtest du es dann bspw. auch nicht mehr.
You see the difference ?
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.
Als erstes: Bitte beachte doch unsere Netiquette. Merci.
Das so oft gesehene Missverständnis bei der Variablenverwendung ist schon so alt wie Batch .
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%
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.
Hallo,
https://www.google.com/search?q=%40echo+off
Gruß,
Peter
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 Urlaub 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- ...Super Lösung, auf manche Sachen kommt man halt nicht, obwohl man nah dran ist. 😅
https://www.google.com/search?q=%40echo+off
Gruß,
Peter