Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst for schleife, Variable wird gesetzt, aber beim Echo wird die Variable nicht angezeigt

Mitglied: Blueberry

Blueberry (Level 1) - Jetzt verbinden

20.12.2008, aktualisiert 02:11 Uhr, 6562 Aufrufe, 8 Kommentare

Hallo Zusammen,

Ich hoffe ich habe nicht falsch gesucht und das Thema, dass ich hier anspreche wurde schon zig-Mal angeschaut...

Na jedenfalls habe ich den Folgenden Code:
01.
for /f "delims=" %%i in ('dir /ad /s /b "C:\Programme\Acronis"') do (  
02.
Set pfad=%%i 
03.
echo %pfad% 
04.
pause)
Und wenn ich ein Echo on habe sehe ich, dass die Variable definiert wird, aber beim Echo die Variable in "vergessenheit" geht... Es heisst nur immer "Echo ist on" oder so ähnlich... Kann mir da jemand helfen ?

Ich danke schon im voraus

Mit freundlichen Grüssen

Blueberry
Mitglied: Biber
20.12.2008 um 01:05 Uhr
Moin Blueberry,

für den CMD-Interpreter ist die FOR-Anweisung, auch wenn sie über mehrere Zeilen formatiert geschrieben wird, eine einzige Anweisung und erst mit der schliessenden Klammer-Zu beendet.
Alle Variablen der Form %var% werden entsprechen einmalig aufgelöst, nämlich dann, wenn diese Zeile als syntaktisch verwertbar eingestuft wurde und die Ausführung losgehen kann.

Wenn die Variablen innerhalb dieser Anweisung neu gesetzt und neu ausgelesen werden, dann musst Du die so genannte "verzögerte Variablenauflösung" oder aus Neudeutsch "Delayed Expansion" aktivieren.
01.
SetLocal EnableDelayedExpansion 
02.
for /f "delims=" %%i in ('dir /ad /s /b "C:\Programme\Acronis"') do (  
03.
Set pfad=%%i 
04.
echo !pfad! 
05.
pause)
Diejenigen Variablen, die immer erst "zum Zeitpunkt des Anfassens" aufgelöst werden sollen, müssen dann in der Form !var! statt %var% geschrieben werden.

Grüße
Biber
Bitte warten ..
Mitglied: Blueberry
20.12.2008 um 10:01 Uhr
Hallo Biber,

Ich danke dir für deine schnelle Lösung für das Problem. Das mit dem "SetLocal EnableDelayedExpansion " hab ich schon mal gesehen wusste aber nie für was das genau war. Jetzt begreiffe ich das schon ein bisschen mehr. Ich wünsche noch ein schönes Weihnachten und ein schönes neues Jahr!

Und wie kann ich die Variable noch ein 3tes mal brauchen sprich wenn ich noch ein Call :sub1 einbauen möchte ?

Mit freundlichen Grüssen

BLueberry
Bitte warten ..
Mitglied: bastla
20.12.2008 um 12:47 Uhr
Hallo Blueberry!

Wenn Du ohnehin ein Unterprogramm verwenden wolltest, wäre "delayedExpansion" gar nicht erforderlich - das sähe dann so aus:
01.
@echo off & setlocal 
02.
for /f "delims=" %%i in ('dir /ad /s /b "C:\Programme\Acronis"') do call :sub1 "%%i" 
03.
goto :eof 
04.
 
05.
:sub1 
06.
set "pfad=%~1" 
07.
echo %pfad% 
08.
:: was sonst noch anliegt 
09.
pause 
10.
goto :eof
Im "sub1" kommmt der übergebene Pfad als erster (und hier einziger) Paramer (%1) an. Mit der Schreibweise %~1 werden die den Parameter umgebenden Anführungszeichen entfernt.

Das "goto :eof" in Zeile 3 sorgt dafür, dass das Unterprogramm nach dem Ende der Schleife nicht noch ein weiteres Mal durchlaufen wird, und das "goto :eof" ("Beende das Unterprogramm und springe zurück ins Hauptprogramm!") in der letzten Zeile wäre gar nicht nötig - es dient nur als Vorsichtsmaßnahme, falls (zukünftig) noch ein weiteres Unterprogramm oder ein Sprung vom Hauptprogramm zu einem "Ende"-Teil folgen sollte.

Grüße
bastla
Bitte warten ..
Mitglied: Blueberry
20.12.2008 um 17:31 Uhr
Hallo Bastla,

Ich möchte mit dem Dir in der For-Schleife einen anderen Batch aufrufen ist das möglich ?

01.
for /f "delims=" %%a in ('dir /S /b "C:\Programme\Acronis" ^| find "test2.bat"') do ( 
02.
Call %%a :sub1)
Den Code habe ich bereits... Er startet zwar den anderen Batch, aber nicht bei Sub1, sondern von Anfang an...

Mit freundlichen Grüssen

Blueberry
Bitte warten ..
Mitglied: bastla
20.12.2008 um 18:59 Uhr
Hallo Blueberry!

Mein Beispiel oben war für ein internes Unterprogramm gedacht - wenn in einem aufgerufenen externen Batch an einer bestimmten Stelle gestartet werden soll, musst Du dies auch dort festlegen, etwa:
01.
@echo off & setlocal 
02.
if "%~1" neq "" goto %~1
Jetzt kannst Du den "call" aus Deinem Beispiel verwenden und es wird sofort zu der als Parameter angegebenen Stelle gesprungen - falls es diese nicht geben sollte, bricht der Batch allerdings ab ...

Mehr Kontrolle (aber auch mehr Aufwand) hast Du, wenn Du jedes mögliche Sprungziel abfragst, also etwa
01.
@echo off & setlocal 
02.
if "%~1"=="" goto :NormalStart 
03.
if "%~1"==":sub1" goto :sub1 
04.
if "%~1"==":sub2" goto :sub2 
05.
:: und so weiter 
06.
echo Das Sprungziel "%~1" wurde  nicht gefunden ... 
07.
goto :eof 
08.
 
09.
:NormalStart 
10.
echo Start erfolgte ohne Parameter 
11.
:: 
12.
goto :eof 
13.
 
14.
:sub1 
15.
echo Starte bei ":sub1" 
16.
:: 
17.
goto :eof 
18.
 
19.
:sub2 
20.
echo Starte bei ":sub2" 
21.
:: 
22.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: Blueberry
21.12.2008 um 11:16 Uhr
Hallo bastla,

Wieder einmal hast du recht :D Aber was ich noch gerne wissen möchte, warum wird die Marke "sub1" als %~1 übergeben ? also ich nehme an das es sich bei dem %~1 um eine eins und nicht um das kleine "L" handelt, den die sehen mehr oder weniger gleich aus...

Mit freundlichen Grüssen

Blueberry
Bitte warten ..
Mitglied: bastla
21.12.2008 um 15:15 Uhr
Hallo Blueberry!

warum wird die Marke "sub1" als %~1 übergeben ?
Falls sich die Frage tatsächlich vor allem auf die "1" bezieht: Es handelt sich tatsächlich um die Ziffer. Jeder Batch kann die Parameter %0 bis %9 verwenden, wobei %0 die Batchdatei selbst repräsentiert und ab %1 die an den Batch übergebenen Parameter - ein in "C:\Scripts\Params.cmd" gespeicherter Batch würde bei einem Aufruf mit
C:\Scripts\Params.cmd ParamEins "Param Zwei" "ParamDrei"
folgende Parametervariablen liefern:
%0=C:\Scripts\Params.cmd 
%1=ParamEins 
%2="Param Zwei" 
%3="ParamDrei"
Wie zu erkennen ist, werden umgebende Anführungszeichen, egal ob erforderlich (wie für "Param Zwei") oder nicht, in der Variablen "mitgeliefert". Um sicher sein zu könnnen, dass keine solchen Anführungszeichen in der Variablen stehen, können diese mit der Schreibweise
%~2
entfernt werden (was ich zumeist gewohnheitsmäßig mache); waren ohnehin keine da, ist dies auch kein Problem - im Ergebnis sind auf jeden Fall keine Anführungszeichen mehr vorhanden.

Grüße
bastla
Bitte warten ..
Mitglied: Blueberry
21.12.2008 um 17:14 Uhr
Hallo bastla,

Das mit dem übergeben wusste ich, aber ich wusste nicht das indiesem Fall auch ":sub1" so über geben wird... Danke nochma

Gruss
Blueberry
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

BATCHDATEI - Variable unter "echo" nicht angezeigt

gelöst Frage von TobiBotBatch & Shell4 Kommentare

Hey, ich bin neu hier und habe gleich mal eine Frage: Ich bin Batch-Neuling und arbeite gerade an einem ...

Batch & Shell

Echo date - Variable

gelöst Frage von CerauxBatch & Shell1 Kommentar

Hallo, ich versuche eine Variable in ein Textdokument auszugeben, jedoch will das nicht wirklich funktionieren: Batch: So soll die ...

Batch & Shell

Verwendung einer gesetzten Variable noch in derselben Eingabezeile

gelöst Frage von EvaEdenBatch & Shell9 Kommentare

Liebe Gemeinde, ich habe ein simples Problem: Ich muss ein paar Befehle in einer Zeile abschicken. Kein Problem, da ...

Linux Tools

Mit echo eine Ausgabe einer Variable ändern.

gelöst Frage von rsadmchefLinux Tools2 Kommentare

Hallo Team, ich habe am Linux Terminal folgendes Konstrukt vor: num="11000" echo $num 11000 Es soll aber 1 1 ...

Neue Wissensbeiträge
Windows 7

Windows 7 - Server 2008 R2: Exploit für Total Meltdown verfügbar

Information von kgborn vor 19 StundenWindows 7

Kleine Information für Administratoren, die für die Updates von Windows 7 SP1 und Windows Server 2008 R2 SP1 verantwortlich ...

Sicherheit

Zero Day-Schwachstelle im Internet Explorer - wird von APT bereits ausgenutzt

Information von kgborn vor 1 TagSicherheit

Im Kernel des Internet Explorer scheint es eine Zero Day-Lücke zu geben, die von staatlichen Akteuren (APT) im Rahmen ...

Microsoft
Folder Security Viewer-Lizenzen zu gewinnen
Information von kgborn vor 1 TagMicrosoft

Ich nehme das Thema mal in Absprache mit Frank hier auf, da es für den einen oder anderen Administrator ...

Hardware

Feueralarm killt Festplatten in Rechenzentrum - führt zu größerem Ausfall

Information von kgborn vor 1 TagHardware12 Kommentare

Noch ein kleiner Beitrag für Administratoren, die in Rechenzentren aktiv sind - so als Fingerzeig. Denn es gibt Szenarien, ...

Heiß diskutierte Inhalte
Linux
Linux Server oder Windows Server - lohnt eine Umstellung auf Linux und ebenso basierende SW bei einer langfristigen Planung?
Frage von motus5Linux27 Kommentare

Wir brauchen bei uns einen neuen Server. Dieser wird als Fileserver, Domäne Controller sowie Exchange Server verwendet. Wir versuchen ...

C und C++
Frage1 C Programmierung-Makefile Frage2 PHP-Programmierung HTTP-Fehler 404
Frage von KatalinaC und C++24 Kommentare

Hallo, ich habe 2 Fragen, die nichts miteinander zu tun haben aber mit denen ich mich gerade beschäftige: 1. ...

LAN, WAN, Wireless
Watchguard T15 VPN Einrichtung
gelöst Frage von thomasjayLAN, WAN, Wireless22 Kommentare

Hallo zusammen, wir möchten gerne über unsere Watchguard T15 einen VPN-Tunnel (Mobile VPN with IPSec) einrichten! Als Client nutzen ...

DSL, VDSL
ISP Wechsel auf Vodefone Koax, Gebäudeverkabelung nur per Cat 7
gelöst Frage von wusa88DSL, VDSL18 Kommentare

Hallo Zusammen, ich bin momentan bei Mnet als Glasfaser Kunde und möchte Preis/Leistungs-Technisch zu Kabel Deutschland / Vodafone wechseln. ...