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 Frage zu for do Schleife mit if-Befehl

Mitglied: user90

user90 (Level 1) - Jetzt verbinden

28.12.2009, aktualisiert 16:56 Uhr, 5620 Aufrufe, 8 Kommentare

Hey,

da ich mich in letzter Zeit "sehr intensiv" mit Batch-Programmierung beschäftige, hab ich eine Frage zu
einer Batch-Anleitung.
Und zwar wird auf dieser Seite erklärt wie man in einer for-do-Schleife ein If-Befehl einfügt:
http://www.antonis.de/dos/batchtut/bat-kurs/#12
Mein Problem ist, dass ich trotz Erklärung dieses Beispiel nicht ganz verstehe.

Befehl mit IF
-------------
Alternative Bedingungen (ODER) lassen sich mit einer FOR-Schleife
einfacher darstellen als durch mehrfache IF-Zeilen, z.B.:
01.
        FOR %%x in (A: a: B: b:) do IF "%1"=="%%x" goto OK 
02.
        QUIT echo Laufwerk %1 ist ungültig! 
03.
        :OK
Hier wird getestet, ob der Befehlsparameter %1 ein gültiges
Diskettenlaufwerk enthält. (Die Anführungszeichen verhindern
Syntaxfehler, falls %1 leer ist. QUIT s. Lektion #11.)


Kann mir bitte jemand erkären, was da gemacht wird und vorallem was bedeutet %1?

danke

[Edit Biber] Codetags nachgetragen [/Edit]
Mitglied: rubberman
28.12.2009 um 14:14 Uhr
Hallo user90,

%1 ist der erste an den Batch übergebene Parameter.
Beispiel mit 2 Batches (im gleichen Verzeichnis):

1. Test.bat
01.
@echo off &setlocal 
02.
for %%x in (A: a: B: b:) do if "%1"=="%%x" goto OK 
03.
echo Laufwerk %1 ist ungueltiges Diskettenlaufwerk! 
04.
pause 
05.
goto :eof 
06.
:OK 
07.
echo Laufwerk %1 ist gueltiges Diskettenlaufwerk! 
08.
pause
2. Aufruf.bat
01.
@echo off 
02.
Test.bat a:
Wenn du "Aufruf.bat" startest, wird beim Aufruf von "Test.bat" der Parameter "a:" mit übergeben.
Der Wert "a:" findet sich dort dann in "%1" wieder.

Grüße
rubberman
Bitte warten ..
Mitglied: bastla
28.12.2009 um 14:51 Uhr
... wobei das Springen aus einer "for"-Schleife sich durch Verwendung eines Schalters auch vermeiden lässt:
01.
@echo off & setlocal 
02.
set "DLW=" 
03.
for %%x in (A: B:) do if /i "%~1"=="%%x" set DLW=True 
04.
if defined DLW goto :OK 
05.
echo Laufwerk %1 ist ungueltiges Diskettenlaufwerk! 
06.
pause 
07.
goto :eof 
08.
:OK 
09.
echo Laufwerk %1 ist gueltiges Diskettenlaufwerk! 
10.
pause
Grüße
bastla
Bitte warten ..
Mitglied: Biber
28.12.2009 um 17:16 Uhr
Moin user90,

ergänzend zu rubberman und bastla:
Wenn du schon einen (cmd.exe-)Batchkurs mitmachst, was natürlich empfehlenswert ist,
dann belaste dich gar nicht erst mit solchen Relikten wie "unbedingten Sprunganweisungen".
Ein "goto :labelX" ist niemals wirklich nötig und bequem immer nur dann,
wenn zu einem Programmfehler gekommen ist...da gilt dann immer "Fehlermeldung anzeigen und Ende".

Wenn du es lesbar halten willst, dann nutze durchaus die "IF.. ) ELSE ( ..)"-Struktur, die ja das logische WENN-DANN-SONST lesbar abbildet.

bastlas Variante wäre so etwas lesbarer:
01.
@echo off & setlocal 
02.
for %%x in (A: B:) do if /i "%~1"=="%%x" set "DLW=True" 
03.
IF defined DLW ( 
04.
   echo Laufwerk %1 ist ein gueltiges Diskettenlaufwerk! 
05.
) ELSE ( 
06.
   echo Laufwerk %1 ist kein gueltiges Diskettenlaufwerk! 
07.
08.
pause
...obwohl auch reichen würde..
01.
@echo off & setlocal 
02.
Set "DLW=kein" 
03.
for %%x in (A: B:) do if /i "%~1"=="%%x" set "DLW=ein" 
04.
 
05.
echo Laufwerk %1 ist %DLW% gueltiges Diskettenlaufwerk! 
06.
pause
Grüße
Biber
Bitte warten ..
Mitglied: bastla
28.12.2009 um 17:49 Uhr
@Biber
Grundsätzliche Zustimmung, allerdings könnte sich (wenn mehr zu tun ist, als eine lapidare Meldung auzugeben) als Nachteil aus der Verwendung von IF () ELSE () ergeben, dass "delayedExpansion" erforderlich wird (was ich hinsichtich der "!"-Problematik zu vermeiden trachte) ...

Grüße
bastla
Bitte warten ..
Mitglied: user90
28.12.2009 um 19:09 Uhr
danke euch allen für die Hilfe,

jetzt weiß ich endlich was %1 bedeutet...
aber so ganz genau weiß ich leider nicht was dieser Test.bat macht.
Wenn ich in Aufruf.bat z.B.: b: eingebe, dann wird er in Test.bat übernommen das ist klar.
Nur ich weiß nicht was mit gültiges / ungültiges Diskettenlaufwerk gemeint ist.

Ich bin noch ein totaler Anfänger was Programmieren allgemein angeht, deshalb wäre
es nett, wenn ihr ausführlicher antworten würdet.
Bitte warten ..
Mitglied: bastla
28.12.2009 um 19:25 Uhr
Hallo user90!
Nur ich weiß nicht was mit gültiges / ungültiges Diskettenlaufwerk gemeint ist.
Da Diskettenlaufwerke im Normalfall die Laufwerksbuchstaben A: oder B: tragen, wird damit einfach nur geprüft, ob der beim Aufruf übergebene erste Parameter (= %1) "A:" oder "a:" oder "B:" oder "b:" lautet - wenn nicht, wird damit kein gültiges Diskettenlaufwerk angesprochen, anderenfalls wird angenommen, dass die Eingabe gültig ist. (Ob allerdings zB das Laufwerk B: dann auch tatsächlich vorhanden ist und auch noch eine Diskette enthält, ist eine ganz andere Frage ...)

Das Ganze ist ja offensichtlich nur als Übungsbeispiel gedacht, und daher zeigt die Ausgabe eigentlich nur, welches Ergebnis das "IF" gebracht hat.

Grüße
bastla
Bitte warten ..
Mitglied: user90
28.12.2009 um 19:55 Uhr
ok,
vielen Dank für die schnelle Antwort, ich glaube ich hab´s jetzt verstanden.
Ich lass das Thema (falls keiner was dagegen hat) trotzdem auf, da mir vllt. andere Dinge
beim Lesen der Anleitung nicht ganz klar sein sollten.
Bitte warten ..
Mitglied: bastla
28.12.2009 um 20:14 Uhr
Nur noch als abschließende Anmerkung zu:
Alternative Bedingungen (ODER) lassen sich mit einer FOR-Schleife
einfacher darstellen als durch mehrfache IF-Zeilen
Im Zweifelsfall würde ich eher zur "findstr"-Methode, etwa
01.
@echo off & setlocal 
02.
echo #A:#B:#|findstr /i "#%~1#">nul && goto :OK 
03.
echo Laufwerk %1 ist ein ungueltiges Diskettenlaufwerk! 
04.
goto :eof 
05.
:OK 
06.
echo Laufwerk %1 ist ein gueltiges Diskettenlaufwerk!
- gerne auch so geschrieben :
01.
@echo off & setlocal 
02.
echo #A:#B:#|findstr /i "#%~1#">nul && ( 
03.
    echo Laufwerk %1 ist ein gueltiges Diskettenlaufwerk! 
04.
) || ( 
05.
    echo Laufwerk %1 ist ein ungueltiges Diskettenlaufwerk! 
06.
)
greifen ...

Grüße
bastla
Bitte warten ..
Ähnliche Inhalte
Entwicklung

Mit welchem Befehl kann ich in einer if schleife in Batch

gelöst Frage von JanInfoHDEntwicklung1 Kommentar

Mit welchem Befehl kann ich in einer if schleife in Batch dem Computer sagen das wenn die eingabe nicht ...

Batch & Shell

Do-While Schleife mit test-path

gelöst Frage von windelterroristBatch & Shell12 Kommentare

Sry, dass ich euch nochmals stören muss Brauche Hilfe bei einer Do-While Schleife Es soll erst nach $destination abgefragt ...

Batch & Shell

Powershell If-Schleife funktioniert nicht

gelöst Frage von windelterroristBatch & Shell5 Kommentare

Hallo Admins Arbeite gerade an einem kleinen Script funktioniert aber nicht so, wie ich mir das vorstelle Mein Code: ...

Batch & Shell

VBS - Do While Schleife - zusätzliche Bedingung

gelöst Frage von goodbytesBatch & Shell5 Kommentare

Hallo, in einem Ordner sollen alle jpg- und pdf-Datein durchlaufen werden, umbenannt und verschoben werden. Das funktioniert auch tadellos, ...

Neue Wissensbeiträge
Humor (lol)

WhatsApp-Nachrichten endlich auch per Bluetooth versendbar

Information von BassFishFox vor 1 StundeHumor (lol)

Genau darauf habe ich gewartet! ;-) Der beliebte Messaging-Dienst WhatsApp erhält eine praktische neue Funktion: Ab dem nächsten Update ...

Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 14 StundenGoogle Android3 Kommentare

Hier eine Information, die für Administratoren und Verantwortliche in Unternehmen, die für die Beschaffung und das Rollout von Android-Geräten ...

Sicherheit

Intel gibt neue Spectre V2-Microcode-Updates frei (20.02.2018)

Information von kgborn vor 14 StundenSicherheit

Intel hat zum 20. Februar 2018 weitere Microcode-Updates für OEMs freigegeben, um Systeme mit neueren Prozessoren gegen die Spectre ...

Microsoft
ARD-Doku - Das Microsoft Dilemma
Tipp von Knorkator vor 17 StundenMicrosoft3 Kommentare

Hallo zusammen, vor einigen Tagen lief in der ARD u.a. Reportage. Das Youtube Video dazu dürfte länger verfügbar sein. ...

Heiß diskutierte Inhalte
Windows Server
AD DS findet Domäne nicht, behebbar?
Frage von schapitzWindows Server40 Kommentare

Guten Tag, ich habe bei einem Kunden ein Problem mit den AD DS. Umgebung ist folgende: Windows Server 2016 ...

Router & Routing
LANCOM VPN CLIENT einrichten
Frage von Finchen961988Router & Routing27 Kommentare

Hallo, ich habe ein Problem und hoffe ihr könnt mir helfen, wir haben einen Kunden der hat einen Speedport ...

Router & Routing
ISC DHCP 2 Subnetze
gelöst Frage von janosch12Router & Routing19 Kommentare

Hallo, ich betreibe bei mir im Netzwerk einen ISC DHCP Server auf Debian, der DHCP verwaltet aktuell ein /24 ...

Switche und Hubs
Cisco SG350X-48 AdminIP in anderes VLAN
Frage von lcer00Switche und Hubs14 Kommentare

Hallo zusammen, ich habe ein Problem mir einem Cisco SG350X-48 bei der Erstinstallation wurde eine IP 192.168.0.254 (Default VLAN ...