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

if Schleifen

Frage Entwicklung Batch & Shell

Mitglied: didie08

didie08 (Level 1) - Jetzt verbinden

19.08.2008, aktualisiert 20.08.2008, 5596 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 ..
Ähnliche Inhalte
Batch & Shell
Batch Schleife als FOR-SCHLEIFE
gelöst Frage von mp2711Batch & Shell2 Kommentare

Mit den FOR-Schleifen habe ich mich leider bislang zu selten auseinander gesetzt, aber da ich sonst gerade nicht weiter ...

Microsoft Office
Vereinfachen einer Schleife
Frage von Jens1975Microsoft Office1 Kommentar

Hallo, ich bin neu und versuche mich jetzt mit VBA Ich möchte die Funktion Autofill durch eine Schleife ersetzen. ...

Netzwerkprotokolle
STP und Schleifen
gelöst Frage von ottokarlNetzwerkprotokolle20 Kommentare

Hallo, ich habe eine allgemeine Frage. Situation: Ich nehme ein Kabel und stecke es im Switch z.B. in Port ...

Entwicklung
PowerShell - Schleifen
gelöst Frage von 119785Entwicklung8 Kommentare

Hallo Leute, ich habe hier eine Aufgabe und brauche mal einen kleinen Tip. Entweder habe ich eine Denkbloacke oder ...

Neue Wissensbeiträge
Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 1 TagWindows 105 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 1 TagSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 2 TagenInternet5 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 2 TagenDSL, VDSL2 Kommentare

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Heiß diskutierte Inhalte
Batch & Shell
Kann man mit einer .txt Datei eine .bat Datei öffnen?
Frage von HelloWorldBatch & Shell16 Kommentare

Wie schon im Titel beschrieben würde ich gerne durch einfaches klicken auf eine Text oder Word Datei eine Batch ...

Router & Routing
OpenWRT bzw. L.E.D.E auf Buffalo WZR-HP-AG300H - update
gelöst Frage von EpigeneseRouter & Routing11 Kommentare

Guten Tag, ich habe auf einem Buffalo WZR-HP-AG300H die alternative Firmware vom L.E.D.E Projekt geflasht. Ich bin es von ...

Windows Server
Ping auf einen bestimmten Server nicht möglich
gelöst Frage von a.thierWindows Server7 Kommentare

Hallo, ich habe folgendes Problem. srv-dc1: Ping srv-nav > geht Ping srv-exchange > geht nicht srv-exchange: Ping srv-dc1 > ...

Hardware
Fujitsu Workstation mit K80 und Quadro P5000, Fehlermeldung: Connect Power Adapter
Frage von MachelloHardware7 Kommentare

Hallo Zusammen, ich benötige euren Rat da ich ratlos bin. Folgende Konfiguration im Büro: Fujitsu Workstation Celcius R940 Power ...