Batch - Warten bis Fenster geschlossen wird

nierewa

Lt. Junior Grade
Registriert
Juni 2008
Beiträge
416
Hallo,

ich möchte über sTabLauncher eine Freigabe im Netzwerk öffnen, die keinen Laufwerksbuchstaben hat.
Der Ordner im Netzwerk soll erst beim ersten Gebrauch verbunden werden: \\Haupt-PC\Meins

Ich hatte das so probiert:

Anwendung: C:\Windows\explorer.exe
Argumente: \n,"\\Haupt-PC\Meins /user:ich hallo123

Das funktioniert leider nicht. Erst wenn ich das Netzlaufwerk zuvor schon mal geöffnet habe.
Also wenn ich im Explorerfenster \\Haupt-PC\Meins als Adresse eingebe. Dann kommt auch die Abfrage des Benutzernamens und des Passworts. Über den oberen Aufruf mit explorer.exe und dem Kommentar geht es nicht.

Hat jemand einen tipp für mich?
 
Du kannst auch einfach unter "Netzwerkkennwörter verwalten" den Benutzernamen und das Kennwort für "Haupt-PC" hinterlegen. Dann wird der immer selbstständig Benutzername und Kennwort eingebe, sobald du \\Haupt-PC\Meins öffnest.

Die Authentifizierungsdaten werden erst ausgelöst, wenn du tatsächlich eine Verbindung herstellst.
 
Code:
net use \\server\freigabe /persistent:no /user:einuser daspasswort

Das ist der Befehl mit dem man ein Netzlaufwerk anbindet. Der explorer öffnet das nur, aber wenn es nicht vorher angebunden wurde, hat er auch nix zu öffnen.
 
nierewa schrieb:
ich möchte über sTabLauncher eine Freigabe im Netzwerk öffnen, die keinen Laufwerksbuchstaben hat.
Der Ordner im Netzwerk soll erst beim ersten Gebrauch verbunden werden: \\Haupt-PC\Meins

Über was?

nierewa schrieb:
Hat jemand einen tipp für mich?

Pack die Freigaben in die Favoriten vom Explorer. Dann sind die aus fast jeder Anwendung zu erreichen und werden erst verbunden, wenn sie aufgerufen werden.

1600677718610.png
 
Du kannst auch einfach unter "Netzwerkkennwörter verwalten" den Benutzernamen und das Kennwort für "Haupt-PC" hinterlegen
Eben das soll nicht passieren damit der Ordner bzw. die Freigabe einfach so geöffnet werden kann.

sTabLauncher ist ein cooles Programm um den Desktop sauber zu halten. Es wird eine art Schellstartleiste erzeugt bei der man,in Tabs sortiert, Verknüpfungen zu Anwenungen ablegen und starten kann.

Pack die Freigaben in die Favoriten vom Explorer.
Danke, cooler Tipp. Werde ich verwenden wenn es gar nicht anders geht.

net use \\server\freigabe /persistent:no /user:einuser daspasswort
Das hab ich schon in eine Batch-Datei verfrachtet. Wenn man das Explorerfenster schließt soll eine Abfrage kommen, ob man das Netzlaufwerk wieder trennen will. Das hab ich auch schon.

Allerdings kommt die Abfrage gleich nach dem Befehl zum Öffnen des Fensters und nicht erst wenn man es schließt

Bash:
@ECHO OFF
net use x: \\Haupt-PC\Meins
start /wait explorer \n, x:
ECHO Soll das Netzlaufwerk wieder getrennt werden? (j / n)
:Frage
SET /p wahl=
if /i not '%wahl%' == 'n' (if /i '%wahl%' == 'j' (goto Ja ) ) else goto Nein
if defined wahl ECHO Bitte nur mit j oder n antworten!
ECHO Antworten Sie Bitte nur mit   j  für Ja oder n für Nein. & goto Frage
:Nein
echo Sie haben NEIN gedrueckt
goto Ende
:Ja
echo Sie haben JA gedrueckt
:Ende
pause
 
Nächstes Mal dann bitte gleich in Beitrag #1 die bestehende Batch posten damit wir nicht alles doppelt durchkauen müssen...

start /wait prüft nur den initial gestarteten Thread. Wenn die darüber gestartete Anwendung ihrerseits neue Threads erstellt und den "Startthread" danach direkt wieder schließt, bekommt die batch das nicht mit bzw. sieht eben nur den beendeten Statthread der Anwendung. Da explorer.exe massiv MultiThreaded ist, vermute ich mal, dass genau das hier das Problem ist.

Ob das mit batch überhaupt sinnvoll zu lösen ist, kann ich aus dem Stegreif von unterwegs gerade nicht sagen. Allerdings sind die Möglichkeiten von batch allgemein sehr begrenzt bzw. teilweise nur mit merkwürdigen Konstrukten zu realisieren. Wenn man an diese Grenze stößt, bietet sich PowerShell als deutlich mächtigere Alternative zu batch an.


*edit
In PowerShell könnte das so aussehen (nur gegoogelt, weil unterwegs)

Code:
Process.Start("explorer.exe", "D:\\").WaitForExit();
 
Nächstes Mal dann bitte gleich in Beitrag #1 die bestehende Batch posten damit wir nicht alles doppelt durchkauen müssen...
Die Batch habe ich erst später probiert. Wie im ersten Post geschrieben wollte ich es ohne batch lösen. Da Du geschrieben hast das man das mit net use lösen könnte habe ich eine Bat-Datei erstellt.

Es wäre gut wenn das über Batch zu lösen wäre oder vielleicht VBScript
 
Warum zwingend batch? PowerShell ist sozusagen das neue batch. Damit hast du deutlich mehr und vor allem standardisierte Werkzeuge und kein batch, bei dem nahezu jedes Konstrukt eigenen Regeln folgt.

"batch is a bitch"

Mir wäre jetzt keine Lösung für das Problem in batch geläufig. vbscript könnte klappen, aber da bin ich nicht auf dem laufenden.

Goggel doch einfach mal nach "windows vbscript wait for application" oder so ähnlich. Etwas anderes werden die meisten hier im Forum auch nicht tun, wenn sie nicht wie aus der Pistole geschossen das Szenario einordnen und bedienen können.
 
Ich hab jetzt ein VBScript erstellt, jedoch funktioniert das Warten nicht.
Javascript:
Set fs = CreateObject("Scripting.filesystemobject")
Set net = CreateObject("WScript.Network")

net.MapNetworkDrive "w:", "\\server_neu\austausch"

Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "explorer.exe /e,w:" ,1,true


if msgbox("Soll das Netzlaufwerk getrennt werden?", vbYesNo) = vbyes then
      'hier code für ja
else
      ' hier code für nö
end if
 
Eventuell ist es dasselbe Problem. Die explorer.exe startet mutmaßlich einen separaten Thread und geht dann wieder zu -> wait abgeschlossen.

Ich kann deinen Anwendungsfall auch nicht so recht nachvollziehen. Vielleicht solltest du das Konzept als solches anders betrachten. Windows wird beispielsweise automatisch nach standardmäßig 15 Minuten Inaktivität das Netzlaufwerk trennen, bei Aktivität aber wieder neuverbinden. Das kann man zB via Registry steuern.
 
Zurück
Oben