if Schleifen
Wert einer Variablen in einer batch mit dem If Befehl untersuchen.
Hallo,
Ich möchte in abhängigkeit vom Wert einer Systemvariablen bestimmte Befehle ausführen. Dazu habe ich mir gedacht mit einer If Schleife den Wert der Variablen zu ermitteln.
Bisher Code sieht bisher folgendermasen aus
Leider scheint das vom Syntax her nicht in Ordnung zu sein. Kann mir jemand sagen wie das richtig aussehen muss damit es funktioniert
Gruß
didie08
Hallo,
Ich möchte in abhängigkeit vom Wert einer Systemvariablen bestimmte Befehle ausführen. Dazu habe ich mir gedacht mit einer If Schleife den Wert der Variablen zu ermitteln.
Bisher Code sieht bisher folgendermasen aus
IF (%EmpirumServer% == "de301386" ECHO hallo1 >>C:\Temp\test.txt
) ELSEIF (
%EmpirumServer% == "10.193.174.81" ECHO hallo2 >>C:\Temp\text.txt
) ELSE (
ECHO keinhallo >>C:\Temp\text.txt
)
Gruß
didie08
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 94789
Url: https://administrator.de/contentid/94789
Ausgedruckt am: 23.11.2024 um 04:11 Uhr
8 Kommentare
Neuester Kommentar
Hallo didie08!
Etwa so:
Soferne der Inhalt der Variablen %EmpirumServer% bereits unter Anführungszeichen steht, kannst Du sie bei der "if"-Abfrage natürlich weglassen.
[Edit] Etwas übersichtlicher geht's eigentlich auch noch:
[/Edit]
Grüße
bastla
Etwa so:
IF /i "%EmpirumServer%"=="de301386" (ECHO hallo1 >>C:\Temp\test.txt
) ELSE (
IF "%EmpirumServer%"=="10.193.174.81" (ECHO hallo2 >>C:\Temp\test.txt
) ELSE (
ECHO keinhallo >>C:\Temp\test.txt
)
)
[Edit] Etwas übersichtlicher geht's eigentlich auch noch:
IF /i "%EmpirumServer%"=="de301386" (
ECHO hallo1 >>C:\Temp\test.txt
) ELSE (
IF "%EmpirumServer%"=="10.193.174.81" (
ECHO hallo2 >>C:\Temp\test.txt
) ELSE (
ECHO keinhallo >>C:\Temp\test.txt
)
)
Grüße
bastla
Hallo didie08!
Soferne es keine weiteren Aktionen gäbe, einfach:
Alternativ dazu eine Art Pendant zu einem VB-"Select Case" (als klassischer "Spaghetti-Code" ):
Wenn Du genauer beschreibst, was Du vorhast, fällt mir vielleicht noch etwas anderes ein ...
Grüße
bastla
Soferne es keine weiteren Aktionen gäbe, einfach:
IF /i "%EmpirumServer%"=="de301386" ECHO hallo1 >>C:\Temp\test.txt & goto :Ende
IF /i "%EmpirumServer%"=="ugfde33" ECHO hallo2 >>C:\Temp\test.txt & goto :Ende
...
:Ende
echo Hier geht es wieder fuer alle gleich weiter ...
IF /i "%EmpirumServer%"=="de301386" goto :Fall1
IF /i "%EmpirumServer%"=="ugfde33" goto :Fall2
...
::Case Else
echo keinhallo >>c:\Temp\test.txt
...
goto :Ende
:Fall1
ECHO hallo1 >>C:\Temp\test.txt
...
goto :Ende
:Fall2
ECHO hallo2 >>C:\Temp\test.txt
...
goto :Ende
...
:Ende
echo Hier geht es wieder fuer alle gleich weiter ...
Grüße
bastla
Hallo didie08!
Soferne es tatsächlich nur um das Mapping ginge, ließe sich das auch etwas kompakter lösen:
Bei dieser Variante könntest Du die Liste der Zuordnungen relativ übersichtlich im Batch selbst hinterlegen und diese verwenden, indem Du einfach die Batchdatei (%~f0) nach allen Zeilen, welche den aktuellen Wert von %EmpirumServer% enthalten (dieser darf dann natürlich nur in den entsprechenden REM-Zeilen vorkommen), durchsuchen lässt und Dir aus diesen Zeilen (durch die Verwendung der Schleife können dies mehrere Zeilen und daher auch mehrere Mappings sein) die entsprechenden Informationen holst.
Grüße
bastla
Soferne es tatsächlich nur um das Mapping ginge, ließe sich das auch etwas kompakter lösen:
@echo off & setlocal
REM P: \\de301386\deShare1
REM S: \\de301386\deShare2
REM P: \\ugfde33\ugShare1
REM Q: \\ugfde33\ugShare2
REM S: \\ugfde33\ugShare3
for /f "tokens=2*" %%i in ('findstr /i "%EmpirumServer%" "%~f0"') do net use %%i "%%j" /p:no>nul
Grüße
bastla
Hallo didie08!
Sauberer wäre folgende Vorgangsweise:
Die "echo"-Zeilen können natürlich auch in eine Logdatei umgeleitet, etwa
oder ganz weggelassen werden (dann genügt auch ein Sprung direkt zu ":Default") ...
Grüße
bastla
[Edit] "findstr"-Zeilen korrigiert [/Edit]
Sauberer wäre folgende Vorgangsweise:
@echo off & setlocal
REM DATA de301386 v: \\ugfde11\X_level$
REM DATA 10.193.174.81\ v: \\ugfde11\X_level$
REM DATA ugf_hefe_02 v: \\ugf_hefe_03\X_level$
REM DATA 10.193.164.8 v: \\ugf_hefe_03\X_level$
REM DATA ugfde28 v: \\ugfde16\X_level$
REM DATA 10.193.164.8 v: \\ugfde16\X_level$
if not defined EmpirumServer goto :KeinServer
findstr "REM DATA" "%~f0"|findstr /i "%EmpirumServer%">nul || goto :NichtInListe
for /f "tokens=4*" %%i in ('findstr "REM DATA" "%~f0"^|findstr /i "%EmpirumServer%"') do (
net use %%i /d>nul
net use %%i "%%j" /p:no>nul
)
goto :eof
:KeinServer
echo EmpirumServer nicht definiert
goto :Default
:NichtInListe
echo %EmpirumServer% scheint nicht in der Serverliste auf
goto :Default
:Default
echo Verbinde mit Default ...
net use v: /d
net use v: \\ugfde11\Y_level
echo %date%_%time%_%computername%_%username% EmpirumServer nicht definiert >>"\\ugfde11\Logs\MappingErrors.log
Grüße
bastla
[Edit] "findstr"-Zeilen korrigiert [/Edit]