zeroblue2005
Goto Top

Hilfe bei einer Schleife in einer Batch

Hallo Zusammen,

ich benötige noch mal Hilfe bei einer Schleife in einer Batch. Dabei geht es darum, dass wenn eine Datei vorhanden ist die nächste zu prüfen bis zu einer bestimmten die nicht vorhanden ist und diese dann zu starten!

Ein Beispiel:

Arbeitspfad: C:\Test\
Inhalte: test.mdb, test1.mdb und test2.mdb

Wenn nun einer dieser Dateien geöffnet ist, werden ja von Windows *-ldb Dateien erzeugt!

Nun möchte ich erreichen, dass man bei klick auf die Batch, die später als Verknüpfung auf dem Desktop liegt, folgendes passiert!

Prüfe ob test.ldb vorhanden ist!
Wenn ja; prüfe ob test1.ldb usw. bis test2.ldb
Wenn Nein: starte die *.mdb also die passende

Wenn dann also test.ldb und test1.ldb vorhanden ist, dann wird die test2.mdb gestartet!

Sind alle *.ldb vorhanden soll eine Meldung erscheinen "Es sind alle Instanzen vergeben" oder so was...

Ich muss offen zugeben, dass ich mich nicht ganz daran trauen und nicht weiss, ob ich besser mit if else oder ne Schleife das besser zu lösen ist!

Danke face-smile

Content-Key: 307764

Url: https://administrator.de/contentid/307764

Printed on: April 26, 2024 at 05:04 o'clock

Member: laster
Solution laster Jun 21, 2016 at 10:32:50 (UTC)
Goto Top
Hallo,

hier ein Ansatz (da kannst Du nix falsch machen):
if exist <insert file name here> (
    rem file exists
) else (
    rem file doesn't exist  
)

vG
LS
Member: sabines
sabines Jun 21, 2016 at 10:36:40 (UTC)
Goto Top
Moin,

ich würde das mit 3 if Abfragen abfangen und im else Fall gar nichts machen, im dritten If dann die Meldung rausgeben.
Teste das mal, batch ist nicht so mein Ding, die Leerzeilen sind wichtig.

IF exist "c:\test\test1.ldb" (
c:\test\test1.mdb
) ELSE (
cd %USERPROFILE%

)

IF exist "c:\test\test2.ldb" (
c:\test\test2.mdb
) ELSE (
cd %USERPROFILE%

)
Member: zeroblue2005
zeroblue2005 Jun 21, 2016 updated at 11:11:38 (UTC)
Goto Top
Ne das haut so nicht hin... leider, wenn dann müsste ja die zweite test gestartet werden, also so:

IF exist "c:\test\test1.ldb" (
c:\test\test2.mdb
) ELSE (
cd %USERPROFILE%

)

Nur das mit dem Else verstehe ich nicht ganz, warum : cd %USERPROFILE%

Das ganze ist noch etwas komplizierter. Wenn keine *.ldb vorhanden ist würde er ja aussteigen. Ich schreibe das ganze mal anders:

Batch wird gestartet:
1. Prüfe ist test.ldb vorhanden?
nein: starte test.mdb raus aus der batch
ja: Springe zu Punkt 2


2.Prüfe ob test1.ldb vorhanden?
nein: starte test1.mdb raus aus der batch
ja: Springe zu Punkt 3


2.Prüfe ob test2.ldb vorhanden?
nein: starte test2.mdb raus aus der batch
ja: Meldung geht nicht mehr alle Instanzen Besetzt


Ich glaube so kommt das besser rüber.... ich glaube das ganze ist was mit goto sprungpunkten und if else
Member: sabines
Solution sabines Jun 21, 2016 at 11:38:28 (UTC)
Goto Top
Stimmt ich hab's verpeilt.
Also das Userprofil ist ein Dummy, da kannst Du machen was Du willst
Und versuchs mal mit if not exist, keine Ahnung ob das funktioniert

IF not exist "c:\test\test1.ldb" (
c:\test\test1.mdb
) ELSE (
cd %USERPROFILE%

)
Member: zeroblue2005
zeroblue2005 Jun 21, 2016 at 11:48:07 (UTC)
Goto Top
Wenn mir jemand hier noch goto Syntax einbaut habe ich was ich brauche...

IF not exist "c:\test\test1.ldb" (
c:\test\test1.mdb
) ELSE (
cd %USERPROFILE%

Ich weiss nicht wie ich das mache...
Member: laster
Solution laster Jun 21, 2016 at 12:05:22 (UTC)
Goto Top
Wenn mir jemand hier noch goto Syntax einbaut habe ich was ich brauche...

IF not exist "c:\test\test1.ldb" (  
  c:\test\test1.mdb
  goto Marke1
) ELSE (
echo "bla bla bla"  
)
goto ENDE

:Marke1
echo "hier wurde zu Marke1 gesprungen (es gibt kein zurück)"  

:ENDE
echo "und tschüss"  

--> http://www.antonis.de/dos/batchtut/infotec/
Member: zeroblue2005
zeroblue2005 Jun 21, 2016 at 13:42:30 (UTC)
Goto Top
Hi,

habe es hinbekommen, so sieht das fertige Teil aus (Pfade gekürzt):

IF not exist "C:\RAP.ldb" (
start C:\RAP.mdb
exit
) ELSE (
goto RAP1
)
goto ENDE

:RAP1
IF not exist "C:\RAP1.ldb" (
start C:\RAP1.mdb
exit
) ELSE (
goto RAP2
)
goto ENDE

:RAP2
IF not exist "C:\RAP2.ldb" (
start C:\RAP2.mdb
exit
) ELSE (
cls
echo "Alle RAP-Instanzen sind in Benutzung!"
echo "Bitte ein RAP-System schliessen!"
pause
)


DANKE face-smile
Member: zeroblue2005
zeroblue2005 Jun 21, 2016 at 14:24:50 (UTC)
Goto Top
Mir ist da noch in Zusammenhang mit dem kleinen Projekt was eingefallen! ich muss natürlich sicherstellen, dass abgeschossene MDBs usw. die es ja leider immer mal gibt keine *.ldb stehen lässt, sonst habe ich ein Problem! Daher wollte ich noch einen Script Nachts über den Server laufen lassen, der folgendes macht:

Durchsuche ein Verzeichnis und loesche alle *.ldb

Habe das hier aber bekomme das nicht angepasst dass er nach *.ldb sucht...

@echo on
for /f "delims=" %%a in ('dir /b /s /ad "C:\Test" ^| findstr /iec:"*.ldb"') DO (
echo Loesche Dateien: %%a
rd "%%a" /s /q
md "%%a"
)
pause

Kann da mal jemand schauen?
Member: zeroblue2005
zeroblue2005 Jun 21, 2016 updated at 14:30:26 (UTC)
Goto Top
Sorry war zu schnell alles gut: for /f %%a IN ('dir /b /s C:\*.ldb') do call del %%a
Member: laster
laster Jun 21, 2016 at 14:32:01 (UTC)
Goto Top
dann teste doch mal das Script:

@echo on
for /f "delims=" %%a in ('dir /b /s /ad "C:\Test" ^| findstr /iec:"*.ldb"') DO (  
echo -----------------------------------------------------------
echo Loesche Dateien: %%a
echo rd "%%a" /s /q  
echo md "%%a"  
)
pause

und schau, ob das passt...
Member: zeroblue2005
zeroblue2005 Jun 21, 2016 at 14:59:19 (UTC)
Goto Top
Ne der klappt nicht aber der hier schon:

for /f %%a IN ('dir /b /s C:\*.ldb') do call del %%a

nur wenn ich so einen Pfad habe, geht es nicht!

for /f %%a IN ('dir /b /s C:\Program Files\RAP\*.ldb') do call del %%a

Dann findet er den Pfad nicht wo muss ich die " " setzen?
Member: Pjordorf
Solution Pjordorf Jun 21, 2016 updated at 16:29:10 (UTC)
Goto Top
Hallo,

Zitat von @zeroblue2005:
for /f %%a IN ('dir /b /s C:\Program Files\RAP\*.ldb') do call del %%a
Dann findet er den Pfad nicht wo muss ich die " " setzen?
Na wie immer so
for /f %%a IN ('dir /b /s "C:\Program Files\RAP\*.ldb"') do call del %%a  
und dein
IF not exist "C:\RAP.ldb" (  
start C:\RAP.mdb
exit
) ELSE (
goto RAP1
)
goto ENDE

:RAP1
IF not exist "C:\RAP1.ldb" (  
start C:\RAP1.mdb
exit
) ELSE (
goto RAP2
)
goto ENDE

:RAP2
IF not exist "C:\RAP2.ldb" (  
start C:\RAP2.mdb
exit
) ELSE (
cls
echo "Alle RAP-Instanzen sind in Benutzung!"  
echo "Bitte ein RAP-System schliessen!"  
pause
)
kann auch so etwas gekürzt aussehen
IF not exist "C:\RAP.ldb" (  
start C:\RAP.mdb
) ELSE (
	If not exist "C:\RAP1.ldb" (  
	start C:\RAP1.mdb
	) Else (
		If not exist "C:\RAP2.ldb" (   
		start C:\RAP2.mdb
		) Else (
			cls
			echo "Alle RAP-Instanzen sind in Benutzung!"  
			echo "Bitte ein RAP-System schliessen!"  
			echo.
			pause
		)
	)
)

Gruß,
Peter
Member: zeroblue2005
zeroblue2005 Jun 21, 2016 at 16:57:26 (UTC)
Goto Top
Hallo Peter,

danke! Aber bei:

for /f %%a IN ('dir /b /s "C:\Program Files\RAP1\*.ldb"') do call del %%a

kommt die Meldung:

C:\Program Files\RAP1>for /F %a IN ('dir /b /s "C:\Program Files\RAP1\*.ldb"') do call del %a

C:\Program Files\RAP1>call del C:\Program
C:\Program konnte nicht gefunden werden

C:\Program Files\RAP1>call del C:\Program
C:\Program konnte nicht gefunden werden

C:\Program Files\RAP1>call del C:\Program
C:\Program konnte nicht gefunden werden

C:\Program Files\RAP1>pause
Drücken Sie eine beliebige Taste . . .
Mitglied: 129813
Solution 129813 Jun 21, 2016 updated at 17:10:22 (UTC)
Goto Top
Hi,
he did not define the delimiters, and so the for loop splits the path into parts by the space character which is one of the default delimiters, so we finally define "no" delimiters at all, then the space in the path doesn't matter.
for /f "delims=" %%a IN ('dir /b /s "C:\Program Files\RAP1\*.ldb"') do del "%%a"  
But this can also be simplified by this
del /s /q "C:\Program Files\RAP1\*.ldb"  
Regards
Member: Pjordorf
Solution Pjordorf Jun 21, 2016 updated at 21:42:08 (UTC)
Goto Top
Hallo,

Zitat von @zeroblue2005:
C:\Program konnte nicht gefunden werden
Sorry, mein Fehler. War ungetestet.... und ein flüchtigkeitsfehler. Nimm
for /f "Delims=" %%a IN ('dir /b /s "C:\Program Files\RAP1\*.ldb"') do call del "%%a"  
Das CALL wird nicht benötigt, stört hier aber nicht.

Gruß,
Peter
Mitglied: 129813
Solution 129813 Jun 21, 2016 updated at 17:12:22 (UTC)
Goto Top
Hi Peter,
you forgot to set the delimiters to zero face-wink, otherwise each path is splittet by the spaces in the path ...
Regards
Member: zeroblue2005
zeroblue2005 Jun 21, 2016 at 17:27:06 (UTC)
Goto Top
Ja auf die Idee bin ich jetzt auch selber gekommen:

del "C:\Program Files\RAP\*.ldb" /f

Danke face-smile
Member: Pjordorf
Solution Pjordorf Jun 21, 2016 updated at 21:42:36 (UTC)
Goto Top
Hallo,

Zitat von @129813:
you forgot to set the delimiters
Thanks, In my own test batch file i had it inserted. Changed...

Gruß,
Peter