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

Frage Entwicklung Batch & Shell

Mitglied: user90

user90 (Level 1) - Jetzt verbinden

28.12.2009, aktualisiert 16:56 Uhr, 5599 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
IF befehle Servergebunden?
Frage von lololu145Batch & Shell8 Kommentare

Hi Leute, ich versuche schon mehrere Tage herauszufinden ob man IF befehle vom Server aus ausführen lassen kann. Also ...

Neue Wissensbeiträge
Internet

Was nützt HTTPS, wenn es auch von Phishing Web-Seiten genutzt wird

Information von Penny.Cilin vor 2 TagenInternet17 Kommentare

HTTPS richtig einschätzen Ob man eine Webseite via HTTPS aufruft, zeigt ein Schloss neben der Adresse im Webbrowser an. ...

Webbrowser

Bugfix für Firefox Quantum released - Installation erfolgt teilweise nicht automatisch!

Erfahrungsbericht von Volchy vor 3 TagenWebbrowser7 Kommentare

Hallo zusammen, gem. dem Artike von heise online wurde mit VersionFirefox 57.0.1 sicherheitsrelevante Bugs behoben. Entgegen der aktuellen Veröffentlichung ...

Sicherheit

Teamviewer Sessions können gekapert werden - Update tw. verfügbar

Information von sabines vor 3 TagenSicherheit6 Kommentare

In bestimmten Konstellationen können Teamviewer Sessions gekapert werden, wahrscheinlich aber ein recht unwahrscheinliches Szenario. Da der Teamviewer gerne für ...

Digitiales Fernsehen

Apple TV: Amazon Prime App ist verfügbar

Information von Frank vor 4 TagenDigitiales Fernsehen4 Kommentare

Die Amazon Prime Video App kann ab sofort auf einem Apple TV ab der 3 Generation installiert werden. Einfach ...

Heiß diskutierte Inhalte
Vmware
Installation Windows 10 VMware
Frage von Ghost108Vmware17 Kommentare

Hallo zusammen, versuche gerade mit Hilfe des vshpere clients eine virtuelle Windows 10 maschine aufzusetzen. 1. virtuelle Maschine erstellt ...

Exchange Server
SBS 2011 E-Mails können gesendet werden, aber nicht von extern empfangen
Frage von andreas1234Exchange Server14 Kommentare

Hallo Community, ich habe das Problem, dass seit knapp zwei Wochen die E-Mails von meinem SBS 2011 einwandfrei gesendet ...

Voice over IP
Telefonstörung - Ortsrufnummern kein Verbindungsaufbau
Frage von Windows10GegnerVoice over IP10 Kommentare

Hallo, sowohl bei uns als auch beim Opa ist es über VoIP nicht möglich Ortsrufnummern anzurufen. Es kommt nach ...

Windows Server
Server 2012 über Eingabeaufforderung devmgmt.msc geht nicht
gelöst Frage von achim222Windows Server9 Kommentare

Hallo, ich habe hier einen Server 2012 der im Reparaturmodus startet. Es liegt an einem falschen VirtIO Treiber für ...