ulrich2272 10 Geschrieben 17. September 2012 Melden Teilen Geschrieben 17. September 2012 Hallo liebe Batch-Programmierer, für folgendes Problem suche ich eine Lösung. Ich versuche, Euch das Problem möglichst genau zu schildern: In unserem Unternehmen ist eine "Start-GUI" im Einsatz, welche dazu dient, andere Applikationen mit entsprechend vorher eingestellten Parametern zu starten. Aus der "Start-GUI" heraus wird zudem ein Command-Fenster geöffnet, in welchem ein paar echo-Ausgaben stattfinden. Nach Auswahl der entsprechenden Parameter innerhalb des "Start-GUI" wird eine Applikation gestartet. Parallel wird im Hintergrund ein Netzwerklaufwerk gemappt, und zwar mit dem NÄCHST FREIEN LAUFWERKSBUCHSTABEN (GetFirstFreeDriveLetter) Der Laufwerksbuchstabe kann, (aber muss nicht zwingend) A:\ sein. Ich nenne ihn hier mal "%LW%" Das verbundene Netzwerklaufwerk ist für die Funktion der gestarteten Applikation zwingend notwendig. So lange die Applikation läuft, bleibt auch das Command-Fenster geöffnet. Erst beim Schließen der Applikation wird das Laufwerk per "net use %LW% /DELETE" wieder sauber abgeklemmt und das Command-Fenster geschlossen. Folgendes Problem tritt ein: Der Anwender schließt das Command-Fenster. Dies hat für die Applikation keinerlei Auswirkung, da das Laufwerk bereits gemappt ist. Allerdings ist der Task nun gestorben und das Laufwerk wird bei beenden der Applikation nicht mehr abgeklemmt. Was passiert? -Die Start-GUI und die Applikation wird erneut gestartet -Das Command-Fenster öffnet sich wieder. -Der nächste, freie Laufwerksbuchstabe wird gemappt - > jetzt B:\ -Der Benutzer schließt das Command-Fenster -...und verbindet sich nach und nach alle zur Verfügung stehenden Laufwerksbuchstaben D:\, E:\, F:\ ,bis alle vergeben sind. Das sieht dann in etwa so aus: A: \\merkur\STARTGui\conf\_share_ B: \\merkur\STARTGui\conf\_share_ C: Lokaler Datenträger D: Wechseldatenträger E: Wechseldatenträger F: Wechseldatenträger G: Wechseldatenträger H: DVD-Laufwerk I: \\merkur\STARTGui\conf\_share_ J: \\merkur\STARTGui\conf\_share_ usw.... Der net use sagt folgendes: C:\Documents and Settings\[user]>net use New connections will be remembered. Status Local Remote Network ---------------------------------------------------------------------------------------------------------------------------- OK A: \\merkur\STARTGui\conf\_share_ Microsoft Windows Network OK B: \\merkur\STARTGui\conf\_share_ Microsoft Windows Network OK I: \\merkur\STARTGui\conf\_share_ Microsoft Windows Network OK Z: \\pluto\private$ Microsoft Windows Network The command completed successfully. C:\Documents and Settings\[user]> Die Batch, die gestartet wird müßte um folgendes ergänzt werden: 1: Abrage: existiert das Netzwerklaufwerk "\\merkur\STARTGui\conf\_share_" ? 2: Bedingung: wenn Ja, dann unter welchem Buchstaben? Wenn Nein, starte die Applikation 3: Aktion: Trenne den Laufwerksbuchstaben.%LW% 4: Abfrage: existiert ein weiteres Netzwerklaufwerk "\\merkur\STARTGui\conf\_share_" ? 5: Bedingung: wenn Ja, dann unter welchem Buchstaben? Wenn nein Starte die Applikation. Damit wäre klar, was gemeint ist. Es darf beim start der "Start-GUI" nur ein Netzwerklaufwerk "\\merkur\STARTGui\conf\_share_" mit Variablem Laufwerksbuchstaben vorhanden sein. Die Lösung muss im Batch programmiert sein. Kein VB oder andere "Tricks" wie Fenster verbergen, etc... sind erlaubt! Wer kann mir hier helfen? Bei Fragen stehe ich gerne zur Verfügung Schonmal vielen Dank im Voraus Uli Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 17. September 2012 Melden Teilen Geschrieben 17. September 2012 Moin, du hast doch schon alles, was du brauchst. Dein Batch ruft zuerst per net use die Liste der Mappings und filtert mit find nach dem gesuchten String. Ist der vorhanden, dann trennt es das Laufwerk. Das bekommst du mit for recht leicht hin. Fertigen Code kann ich dir nicht dazu geben, weil das immer ein wenig Gebastel ist, aber das dürftest du fix fertig kriegen. Eine andere Variante wäre, einfach per net use * /delete alle Mappings zu löschen. Da weiß ich aber nicht, ob das bei dir machbar ist. Gruß, Nils Zitieren Link zu diesem Kommentar
nawas 32 Geschrieben 18. September 2012 Melden Teilen Geschrieben 18. September 2012 Habt ihr so viele Variable ...STARTGui\conf\_share_...??? Denn ansonsten würde ich hier diese fest vergeben (z.b. S-V) und gut ist. Andernfalls würde ich auch am Anfang wie Nils mit * /delete arbeiten, oder zusätzlich zu den Mapings /PERSISTENT:NO mit anfügen, dann würden diese bei einem reboot auch wieder weg sein. Zitieren Link zu diesem Kommentar
ulrich2272 10 Geschrieben 18. September 2012 Autor Melden Teilen Geschrieben 18. September 2012 Hallo Nils, Danke! Erstmal - die Variante mit "net use * /delete alle Mappings zu löschen" kommt nicht in Frage... Ich komme an der Stelle um die Laufwerksbuchstaben auszulesen nicht weiter und bräuchte hier Hilfe: Folgedes habe ich bereits: @echo off FOR /F "tokens=*" %%A IN ('net use ^| FIND "STARTGui\conf\_share_"') DO echo %%A Die zeilenweise Ausgabe der Variable %%A sieht wie folgt aus: OK A: \\merkur\STARTGui\conf\_share_ OK B: \\merkur\STARTGui\conf\_share_ OK I: \\merkur\STARTGui\conf\_share_ Wie extrahiere ich jetzt die Laufwerksbuchstaben? schönen Gruß Zitieren Link zu diesem Kommentar
ulrich2272 10 Geschrieben 18. September 2012 Autor Melden Teilen Geschrieben 18. September 2012 Hallo nawas, ja, wie gesagt, die Laufwerksbuchstaben werden nach dem Prizip "was als nächstes frei ist", vergeben. Einen fester Buchstabe können wir nicht vergeben (aufgrund Anforderung!). Die Laufwerke werden nicht dauerhaft gemapt (/PERSISTENT:NO) und der reboot würde in jeden Fall helfen. Zitieren Link zu diesem Kommentar
ulrich2272 10 Geschrieben 18. September 2012 Autor Melden Teilen Geschrieben 18. September 2012 Hallo nawas, ja, wie gesagt, die Laufwerksbuchstaben werden nach dem Prizip "was als nächstes frei ist", vergeben. Einen fester Buchstabe können wir nicht vergeben (aufgrund Anforderung!). Die Laufwerke werden nicht dauerhaft gemapt (/PERSISTENT:NO) und der reboot würde in jeden Fall helfen, ist aber die Holzhammer-Methode. Gruß Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 18. September 2012 Melden Teilen Geschrieben 18. September 2012 Moin, Wie extrahiere ich jetzt die Laufwerksbuchstaben? mit einer zweiten FOR-Schleife. Entweder verschachtelst du beide Schleifen oder du gibst das Ergebnis der ersten Schleife in eine temporäre Datei aus, die du in der zweiten Schleife verarbeitest. Gruß, Nils Zitieren Link zu diesem Kommentar
ulrich2272 10 Geschrieben 18. September 2012 Autor Melden Teilen Geschrieben 18. September 2012 Da hab' ich mir jetzt mal was zusammengebastelt... Vielleicht kann sich das ja mal jemand anschauen und evtl. korrigieren. Funktionieren tut's jedenfalls, aber vielleicht geht's ja noch eleganter ?!? @echo off for /f "tokens=2,3 delims= " %%i in ('net use ^| FIND "\\merkur\STARTGui\conf\_share_"') do ( rem echo %%i net use %%i /delete /y ) Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 18. September 2012 Melden Teilen Geschrieben 18. September 2012 Moin, Eleganz als Anforderung ist bei Batchprogrammierung fehl am Platz. ;) Gruß, Nils Zitieren Link zu diesem Kommentar
ulrich2272 10 Geschrieben 18. September 2012 Autor Melden Teilen Geschrieben 18. September 2012 Hallo, da magst Du wohl recht haben ...;) Trotzdem Danke für Deine/Eure "Richtungsweisungen". Mit bisschen Hirnschmalz hat's ja jetzt doch noch irgendwie geklappt. :jau: bye Uli Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 18. September 2012 Melden Teilen Geschrieben 18. September 2012 Moin, ja, prima, ist doch klasse. Für Batch ist das auch durchaus elegant, zumal es offenbar mit nur einer Schleife lösbar ist. :) Bei FIND sollte man i.d.R. /i als Schalter mit angeben. Gruß, Nils Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.