2 Befehle in einer FOR-Schleife

  • #1
B

Björn_2

Bekanntes Mitglied
Themenersteller
Dabei seit
09.07.2004
Beiträge
305
Reaktionspunkte
0
Hallo,

ich muss zwei Befehle in einer For-Schleife ausführen. Wie geht das? Die Doku sagt mir, dass es nur einen Befehl geben kann.

Ich möchte ein Script schreiben, dass mir den nächsten freien Laufwerksbuchstaben ausgibt.

Ich wollte das Script ähnlich gestalten, wie das Script zur CD-ROM erkennung, wobei in diesem Script eine Datei cd.txt existiert.
Code:
FOR %%d IN (c: d: e: f: g: h: i: j: k: l: m: n: o: p: q: r: s: t: u: v: w: x: y: z:) DO IF EXIST %%d\CD.txt SET cdrom=%%d

Mit dem Befehl net use w: bspw. kann man anhand des errorlevels erfragen, ob der Buchstabe bereits mit einem Netzlaufwerk verbunden ist.

Ich muss also irgendwie die folgenden Zeilen in meiner for-Schleife unterbringen:
net use %laufwerksbuchstabe%
if %errorlevel%==2 (nicht verbunden) oder
if %errorlevel%==0 (verbunden)

Könnt ihr mir bitte weiter helfen?

Gruß
Björn
 
  • #2
Nimm ne neue Batchdatei und ruf die auf. Dann haste nur einen Befehl in der FOR Schleife.

Eddie
 
  • #3
Das Problem ist nur:
Wie kriege ich den ermittelten Laufwerksbuchstaben wieder zurück?

So ganz weiß ich noch nicht, wie das gehen soll.
 
  • #4
Den hast Du mit set doch schon festgelegt. Du solltest ihn also auch einfach abfragen können.

Eddie
 
  • #5
???

Genau den Laufwerksbuchstaben will ich doch dann mittels einer zweiten Batch-Datei ermitteln und erst dann mit set festlegen.

Mein Problem ist doch, dass ich zum ermitteln des Laufwerksbuchstabens zwei Befehle brauche.
Die for-schleife liefert den zu testenden Buchstaben und wenn der Buchstabe frei ist, mir also net use den richtigen errorlevel mitteilt, dann will ich mit set den Buchstaben festlegen.

Also:
Code:
net use f:
if %errorlevel%==2 set laufwerksbuchstabe f:
net use g:
if %errorlevel%==2 set laufwerksbuchstabe g:
...
net use z:
if %errorlevel%==2 set laufwerksbuchstabe z:

Natürlich könnte ich nach dem ersten Match abbrechen, doch dann hätte die for-schleife noch einen weiteren Befehl. Ich kann das ganze natürlich so machen wie im Code oben exemplarisch gezeigt, doch wäre das keine saubere Programmierung.
 
  • #6
Hallo,

probier es mal so (nicht getestet):

Code:
FOR %%d IN (c: d: e: f: g: h: i: j: k: l: m: n: o: p: q: r: s: t: u: v: w: x: y: z:) DO Call :Pruefen %%d
goto :EOF

:Pruefen
REM %%d wurde aus obiger Schleife durch den Call Befehl in %1 abgelegt.
net use %1
if %errorlevel%==2 ...
if %errorlevel%==0 ...
...
REM Nachfolgendes goto :EOF funktioniert als Next, d.h. springt in die Schleife zurück
goto :EOF

Das Label EOF darf nicht definiert werden, weil es hier eine besondere Aufgabe hat.
Siehe
Code:
help call|more
an der Eingabeaufforderung.
 
  • #7
Hallo Björn,

dein ganzes Problem reduziert sich mit VBScript auf die folgenden
wenigen Zeilen:

Code:
' Free Drive-Letters
option explicit

Dim objFSO    
Dim nIndex    
Dim strTemp   
 
Set objFSO = CreateObject(Scripting.FileSystemObject)

For nIndex = 0 To 25 Step 1
  if objFSO.DriveExists(Chr(nIndex+65)) then
   strTemp = strTemp & Drive:  & Chr(nIndex + 65) & :\  exists & vbCrLf
  Else
   strTemp = strTemp & Drive:  & Chr(nIndex + 65) & _
                       :\  is free Drive-Letter! & vbCrLf
  End If
 Next
Call MsgBox(strTemp)

set objFSO = nothing

Bitte versteh mich nicht falsch!
Ich möchte dir keinesfalls vorschreiben, auf welche Art du welches Problem zu lösen hast!
Ich möchte nur verdeutlichen, dass sich manche Dinge mit anderen
Werkzeugen einfacher und zeitsparender lösen lassen!

Gruss

Reiner

PS.: Die DOS-/Windows-Batchsprache war (im Gegensatz zu
       den Sprachen der UNIX-Shells) immer eine Krücke und wird
       es auch immer bleiben.
 
  • #8
Vielen Dank Reiner!

Ich werde das Script gleich mal ausprobieren.
ReinerZ schrieb:
Bitte versteh mich nicht falsch!
Ich möchte dir keinesfalls vorschreiben, auf welche Art du welches Problem zu lösen hast!
Ich möchte nur verdeutlichen, dass sich manche Dinge mit anderen
Werkzeugen einfacher und zeitsparender lösen lassen!

Gruss

Reiner

PS.: Die DOS-/Windows-Batchsprache war (im Gegensatz zu
       den Sprachen der UNIX-Shells) immer eine Krücke und wird
       es auch immer bleiben.
Warum soll ich dich falsch verstehen? Wenn es mit Bordmitteln nicht zu lösen ist oder es bessere Alternativen gibt, dann bin ich über jeden anderen Vorschlag sehr dankbar.

Gruß
Björn
 
Thema:

2 Befehle in einer FOR-Schleife

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.963
Mitglieder
51.493
Neuestes Mitglied
Flensburg45
Oben