Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

if Schleifen

Frage Entwicklung Batch & Shell

Mitglied: didie08

didie08 (Level 1) - Jetzt verbinden

19.08.2008, aktualisiert 20.08.2008, 5564 Aufrufe, 8 Kommentare

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
01.
IF (%EmpirumServer% == "de301386"  ECHO hallo1 >>C:\Temp\test.txt  
02.
	) ELSEIF (  
03.
	%EmpirumServer% == "10.193.174.81" ECHO hallo2 >>C:\Temp\text.txt 
04.
	) ELSE ( 
05.
	ECHO keinhallo >>C:\Temp\text.txt 
06.
)
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
Mitglied: bastla
19.08.2008 um 16:04 Uhr
Hallo didie08!

Etwa so:
01.
IF /i "%EmpirumServer%"=="de301386" (ECHO hallo1 >>C:\Temp\test.txt  
02.
	) ELSE ( 
03.
		IF "%EmpirumServer%"=="10.193.174.81" (ECHO hallo2 >>C:\Temp\test.txt 
04.
	) ELSE ( 
05.
		ECHO keinhallo >>C:\Temp\test.txt 
06.
07.
)
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:
01.
IF /i "%EmpirumServer%"=="de301386" ( 
02.
	ECHO hallo1 >>C:\Temp\test.txt  
03.
) ELSE ( 
04.
	IF "%EmpirumServer%"=="10.193.174.81" ( 
05.
		ECHO hallo2 >>C:\Temp\test.txt 
06.
	) ELSE ( 
07.
		ECHO keinhallo >>C:\Temp\test.txt 
08.
09.
)
[/Edit]

Grüße
bastla
Bitte warten ..
Mitglied: didie08
19.08.2008 um 16:37 Uhr
Hallo bastla

Danke für die schnelle Antwort.

Es hat funktioniert.
Aber wie muss das ganze Aussehen wenn %EmpirumServer% 5 verschiedene Werte haben kann.

Ich habe bei meinem Beispiel mal eine 3 Variante angefügt und schon ging es nicht mehr.

01.
IF /i "%EmpirumServer%"=="de301386" (ECHO hallo1 >>C:\Temp\test.txt 
02.
	) ELSE ( 
03.
		IF "%EmpirumServer%"=="ugfde33" (ECHO hallo2 >>C:\Temp\test.txt 
04.
	) ELSE ( 
05.
		IF "%EmpirumServer%"=="10.193.174.81" (ECHO hallo3 >>C:\Temp\test.txt 
06.
	) ELSE ( 
07.
		ECHO keinhallo >>c:\Temp\test.txt 
08.
09.
)
Kannst du mir nochmal weiterhelfen

Gruß
didie08
Bitte warten ..
Mitglied: bastla
19.08.2008 um 16:52 Uhr
Hallo didie08!

Soferne es keine weiteren Aktionen gäbe, einfach:
01.
IF /i "%EmpirumServer%"=="de301386" ECHO hallo1 >>C:\Temp\test.txt & goto :Ende 
02.
IF /i "%EmpirumServer%"=="ugfde33" ECHO hallo2 >>C:\Temp\test.txt & goto :Ende 
03.
... 
04.
 
05.
:Ende 
06.
echo Hier geht es wieder fuer alle gleich weiter ...
Alternativ dazu eine Art Pendant zu einem VB-"Select Case" (als klassischer "Spaghetti-Code" ):
01.
IF /i "%EmpirumServer%"=="de301386" goto :Fall1 
02.
IF /i "%EmpirumServer%"=="ugfde33" goto :Fall2 
03.
... 
04.
 
05.
::Case Else 
06.
echo keinhallo >>c:\Temp\test.txt 
07.
... 
08.
goto :Ende 
09.
 
10.
:Fall1 
11.
ECHO hallo1 >>C:\Temp\test.txt 
12.
... 
13.
goto :Ende 
14.
 
15.
:Fall2 
16.
ECHO hallo2 >>C:\Temp\test.txt 
17.
... 
18.
goto :Ende 
19.
 
20.
... 
21.
 
22.
:Ende 
23.
echo Hier geht es wieder fuer alle gleich weiter ...
Wenn Du genauer beschreibst, was Du vorhast, fällt mir vielleicht noch etwas anderes ein ...

Grüße
bastla
Bitte warten ..
Mitglied: didie08
19.08.2008 um 19:30 Uhr
Hallo bastla

Es geht darum an veschiedenen PC's Freigaben als Laufwerke zu mappen, die sich auf verschiedenen Servern befinden. Der jeweilige Host Name oder die IP Adresse der Server ist als Systemvariable EmpirumServer=XXX an den PC's eingetragen.

Lautet die System Variable z.B. EmpirumServer=ugfde33 so wird mit "net use" die darauf befindliche Freigabe gemappt.

Ich hatte gedacht das mit aneinander gehängten if bzw. elseif Abfragen in einer batch Datei erledigen zu können.

Mit dem "Spaghetti-Code" lässt sich die Aufgabe gut lösen.

Nochmals Danke für deine Hilfe

Gruß
didie08
Bitte warten ..
Mitglied: bastla
19.08.2008 um 19:51 Uhr
Hallo didie08!

Soferne es tatsächlich nur um das Mapping ginge, ließe sich das auch etwas kompakter lösen:
01.
@echo off & setlocal 
02.
REM P: \\de301386\deShare1 
03.
REM S: \\de301386\deShare2 
04.
REM P: \\ugfde33\ugShare1 
05.
REM Q: \\ugfde33\ugShare2 
06.
REM S: \\ugfde33\ugShare3 
07.
 
08.
for /f "tokens=2*" %%i in ('findstr /i "%EmpirumServer%" "%~f0"') do net use %%i "%%j" /p:no>nul
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
Bitte warten ..
Mitglied: didie08
20.08.2008 um 10:09 Uhr
Hallo bastla

Ich habe deinen Code auf meine Bedürfnissse Angepasst . Funktioniert prima

Nur Was mache ich wenn %EmpirumServer% nicht gesetzt ist oder einen Wert hat den ich nicht prüfe. Ich habe das mit dem IF NOT EXIST "v:\" gelöst.
Oder gibt es noch eine elegantere Lösung ?

01.
@echo off & setlocal 
02.
REM de301386 v: \\ugfde11\X_level$ 
03.
REM 10.193.174.81\ v: \\ugfde11\X_level$ 
04.
REM ugf_hefe_02 v: \\ugf_hefe_03\X_level$ 
05.
REM 10.193.164.8 v: \\ugf_hefe_03\X_level$ 
06.
REM ugfde28 v: \\ugfde16\X_level$ 
07.
REM 10.193.164.8 v: \\ugfde16\X_level$ 
08.
rem for /f "tokens=3*" %%i in ('findstr /i "%EmpirumServer%" "%~f0"') do net use %%i "%%j" /p:no>nul 
09.
 
10.
IF NOT EXIST "v:\" net use v: \\ugfde11\Y_level

Gruß
didie08
Bitte warten ..
Mitglied: bastla
20.08.2008 um 11:14 Uhr
Hallo didie08!

Sauberer wäre folgende Vorgangsweise:
01.
@echo off & setlocal 
02.
REM DATA de301386 v: \\ugfde11\X_level$ 
03.
REM DATA 10.193.174.81\ v: \\ugfde11\X_level$ 
04.
REM DATA ugf_hefe_02 v: \\ugf_hefe_03\X_level$ 
05.
REM DATA 10.193.164.8 v: \\ugf_hefe_03\X_level$ 
06.
REM DATA ugfde28 v: \\ugfde16\X_level$ 
07.
REM DATA 10.193.164.8 v: \\ugfde16\X_level$ 
08.
 
09.
if not defined EmpirumServer goto :KeinServer 
10.
findstr "REM DATA" "%~f0"|findstr /i "%EmpirumServer%">nul || goto :NichtInListe 
11.
 
12.
for /f "tokens=4*" %%i in ('findstr "REM DATA" "%~f0"^|findstr /i "%EmpirumServer%"') do ( 
13.
    net use %%i /d>nul 
14.
    net use %%i "%%j" /p:no>nul 
15.
16.
goto :eof 
17.
 
18.
:KeinServer 
19.
echo EmpirumServer nicht definiert 
20.
goto :Default 
21.
 
22.
:NichtInListe 
23.
echo %EmpirumServer% scheint nicht in der Serverliste auf 
24.
goto :Default 
25.
 
26.
:Default 
27.
echo Verbinde mit Default ... 
28.
net use v: /d 
29.
net use v: \\ugfde11\Y_level
Die "echo"-Zeilen können natürlich auch in eine Logdatei umgeleitet, etwa
01.
echo %date%_%time%_%computername%_%username% EmpirumServer nicht definiert >>"\\ugfde11\Logs\MappingErrors.log
oder ganz weggelassen werden (dann genügt auch ein Sprung direkt zu ":Default") ...

Grüße
bastla

[Edit] "findstr"-Zeilen korrigiert [/Edit]
Bitte warten ..
Mitglied: didie08
20.08.2008 um 14:19 Uhr
Hallo bastla,

Funktioniert klasse

nochmals vielen Dank

Ich habe noch ein weiteres Problem, für das ich aber einen neuen Beitrag eröffne, damit das Ganze übersichtlich bleibt.


Gruß
didie08
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Datenbanken
gelöst Schleifen in SQL-Abfrage bei 2 Tabellen (2)

Frage von Aximand zum Thema Datenbanken ...

Batch & Shell
gelöst Batch: (at)set und (at)echo in For-Schleifen? und mehr (8)

Frage von Ben.Blake.79 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...

Exchange Server
DNS Einstellung - zwei feste IPs für Mailserver (15)

Frage von ivan0s zum Thema Exchange Server ...