Skript "vergisst" 2. Laufwerk

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Best-Code-in-Use
Posts: 141
Joined: 01 Dec 2015, 05:13
Location: Germany

Skript "vergisst" 2. Laufwerk

15 Jun 2017, 09:12

Hallo,

ich habe ein Skript das automatisch meine Notebook Laufwerke verbindet, sobald das Notebook im Netzwerk verfügbar ist.
Das Problem ist nur das der 2. Timer nur noch das Laufwerk "V" und nicht mehr das Laufwerk "W" verbindet.

Code: Select all

If (V := FileExist("V:\###_Testdatei_Synchronisation---Nicht-Loeschen.txt")) && (W := FileExist("W:\###_Testdatei_Synchronisation---Nicht-Loeschen.txt"))
Bei der ersten Verbindung werden kurioserweise beide Laufwerke verbunden.
Gibt es eine Möglichkeit die Abfrage des 2. Laufwerkes im 2. Timer zu erzwingen?

Code: Select all

/*
Dieses Skript verbindet meinen PC mit den Festplatten des Notebooks sobald es im Netzwerk verfuegbar ist.

Hierzu wird ein Ping gesendet und bisher habe ich es per Aufgabenplanung geregelt.
+++ Die ersten 15 Minuten lang jede Minute >>>>> Es wird nachgesehen, ob das Laufwerk, bzw. mein Notebook verfügbar ist und ggf. eine Verbindung hergestellt.
+++ Anschließend alle 3 Minuten >>>>> Es wird nachgesehen, ob das Laufwerk, bzw. mein Notebook verfügbar ist und ggf. eine Verbindung hergestellt.
(Ping und die Verbindung von Laufwerk V & W)

+++ Wichtig ist auch das der Timer auch nach einer erfolgreichen Verbindung weiter aktiv bleibt, da die Verbindung nicht permanent hergestellt werden darf.
(Hintergrund= Der PC läuft manchmal die ganze Woche durch und das Notebook wird zwischendurch getrennt und die Laufwerke gleichzeitig abgemeldet)
*/

#NoEnv      ; Keine Umgebungsvariablen nutzen
#NoTrayIcon ; Das AHK Symbol wird nicht angezeigt
#SingleInstance force ; Das Skript wird bei Neustart ohne Nachfrage ersetzt
#Persistent ; Das Skript beibt auch nach einem Return aus einem Timer aktiv.

Start  := A_Now      ; Startzeitpunkt merken
Phase1 := 15         ; Dauer der ersten Phase nach dem Start in Minuten
Timer1 := 60 * 1000  ; in Phase 1 jede Minute aufrufen
Timer2 := 3 * Timer1 ; danach alle 3 Minuten aufrufen

SetTimer, Verbinden, %Timer1%
Gosub, Verbinden     ; Timer nach dem Start sofort aufrufen

Return

Verbinden:
; Pruefen, ob die erste Phase abgelaufen ist
If (Phase1) {
   Minuten := A_Now
   Minuten -= Start, M
   If (Minuten >= Phase1) { ; sie ist vorbei!
      SetTimer, Verbinden, %Timer2%
      Phase1 := 0
   }
}
; Pruefen, ob die Laufwerke verbunden sind
; Hier kann auch ein Pfad zu einer Datei angegeben werden, z.B.: V:\###_Testdatei_Synchronisation---Nicht-Loeschen.txt
If (V := FileExist("V:\###_Testdatei_Synchronisation---Nicht-Loeschen.txt")) && (W := FileExist("W:\###_Testdatei_Synchronisation---Nicht-Loeschen.txt")) 
   Return ; beide Laufwerke sind verbunden, keine Aktion notwendig
; Die Konsole (cmd) wird versteckt (, "Arbeitsverzeichniss", Hide) gestartet und es wird per Ping geprueft - ob Dell-PC existiert
RunWait, %ComSpec% /c ping -n 1 Dell-NB-PC, , Hide UseErrorLevel
If (ErrorLevel) ; der PC / das Laufwerk ist nicht erreichbar
   Return ; keine Aktion moeglich
; Fehlende Laufwerke verbinden
; Fuehre die Konsole (cmd) versteckt (, "Arbeitsverzeichniss", Hide) aus und verbinde per Net Use mit Dell-PC als Laufwerk
If (V = "") ; Laufwerk V verbinden
   Run %ComSpec% /c net use V: \\Dell-NB-PC\Daten-D /persistent:no , , Hide
If (W = "") ; Laufwerk W verbinden
   Run %ComSpec% /c net use W: \\Dell-NB-PC\Sicherung-E /persistent:no , , Hide
Return
Greetings Best-Code-in-Use
User avatar
jNizM
Posts: 2508
Joined: 30 Sep 2013, 01:33
GitHub: jNizM
Contact:

Re: Skript "vergisst" 2. Laufwerk

16 Jun 2017, 06:06

Also ich würde das so machen (ungetestet)

Code: Select all

#NoEnv
#NoTrayIcon
#SingleInstance Force
#Persistent

global LW_V  := "V:\###_Testdatei_Synchronisation---Nicht-Loeschen.txt"
global LW_W  := "W:\###_Testdatei_Synchronisation---Nicht-Loeschen.txt"
global TIMER := 1000 * 60 * 1

SetTimer, Verbinden, % TIMER

Verbinden:
    ; Wenn die Laufwerke vorhanden sind, mache nichts
    if (FileExist(LW_V)) && (FileExist(LW_W))
        return

    ; Wenn die Laufwerke nicht vorhanden sind, pinge den Server ob er erreichbar ist, wenn nicht, mache nichts
    RunWait, %comspec% /c ping -n 1 Dell-NB-PC,, Hide UseErrorLevel
    if (ErrorLevel)
        return

    ; Wenn Server erreichbar ist und die Laufwerke sind nicht vorhanden, binde sie ein
    if !(FileExist(LW_V))
        Run, %comspec% /c net use V: \\Dell-NB-PC\Daten-D /persistent:NO,, Hide

    if !(FileExist(LW_W))
        Run, %comspec% /c net use W: \\Dell-NB-PC\Sicherung-E /persistent:NO,, Hide
return
edit code: #1
[AHK] 1.1.30.03 x64 Unicode | [WIN] 10 Pro (Version 1903) x64 | [GitHub] Profile
Donations are appreciated if I could help you
Best-Code-in-Use
Posts: 141
Joined: 01 Dec 2015, 05:13
Location: Germany

16 Jun 2017, 06:08

@jNizM

Vielen Dank, das werde ich mal testen...
Greetings Best-Code-in-Use
Best-Code-in-Use
Posts: 141
Joined: 01 Dec 2015, 05:13
Location: Germany

16 Jun 2017, 12:00

Läuft, ich danke Dir...
Habe es jetzt auf 2 Minuten eingestellt, da klappt auch die erneute Verbindung.

Mein Dank auch an just me, der bei der ersten Version geholfen hat...
Greetings Best-Code-in-Use

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: Bekkart and 20 guests