Ergebnis 1 bis 9 von 9

Thema: startscript

  1. #1
    Senior Avatar von Uranjitsu
    Registriert
    May 2016
    Beiträge
    210
    Gefällt mir!
    223
    Du gefällst: 158

    startscript

    Hallo zusammen,

    kennt sich jemand mit Batch-Dateien aus?
    Ich bräuchte ein kleines Startscript, mit folgenden Features:

    - Starten von zwei *.exe Dateien in zwei unterschiedlichen Ordner
    - Zeit + Datum des System auf den aktuellen Stand setzen
    - Zwei Fenster anordnen (Rechts oben / Rechts unten am Bildschirmrand)
    - Die LID-Funktion bei Laptops (Energieoptionen) von Sleep auf Do nothing stellen

    Zu beachten sind das Datum der jeweiligen Ordner, hier muss sicher mit RegEx gearbeitet werden, damit man die Batch hinterher nicht nach einem Update der Tools anpassen muss.

    Grundstruktur:

    In den Ordner WTP*

    Ordner 1: WindowsActive*
    Datei starten: WindowsActive.exe (Hat nie eine Versionsnummer)
    Ordner 2: asus-wtp\bin
    Datei starten: DiagEG.exe

    Dann sollen die Fenster, wie oben beschrieben, angeordnet werden.
    Name der Fenster:
    Fenster 1: System Reperation Tool 3.14 (Die Version variiert auch, demnach denke ich, muss ich auch rein RegEx genutzt werden)
    Fenster 2: WindowsActive

    Dann sollte das Datum + Zeit des Systems aktualisiert werden.
    Berücksichtigt werden sollte für die Batch, dass es sich hier ab Windows 7 - Windows 10 Systeme handelt

    Und die Funktion der Laptops/Netbooks/etc., welche das Gerät zum einschlafen bringt, wenn das Display geschlossen wird, soll ausgestellt werden.

    Hat davon jemand Ahnung? Ist mein Wunsch möglich und würde das jemand für mich umsetzen?
    Das würde den Arbeitsprozess wirklich verkürzen und ich wäre mehr als nur dankbar.

    LG - Uranjitsu
    Geändert von Uranjitsu (11.07.2016 um 18:31 Uhr)

  2. #2
    Senior
    Registriert
    Jul 2016
    Beiträge
    349
    Gefällt mir!
    87
    Du gefällst: 438
    Ich denke mal das ich dir als Batch unwissender da nicht weiterhelfen kann.
    Trotzdem fallen mir zwei Dinge auf. Wobei ich gar nicht weiß ob ich da richtig liege.
    Erstens, ich bin mir nicht sicher ob es das überhaupt noch gibt, aber ich glaube Batch Dateien kann man sowohl im einfachen CMD Fenster laufen lassen, als auch als Powershell Batch. Vielleicht sollte man abklären was es davon sein soll/darf.
    Das zweite,
    System Reperation Tool 3.14 (Die Version variiert auch, demnach denke ich, muss ich auch rein RegEx genutzt werden)
    Das kommt wohl darauf an wo du die jeweils aktuelle Version angibst. Irgendjemand oder etwas muss diese ja ändern und aktuell halten, wird die irgendwo angegeben oder steht das in einer immer erneuerten Datei ?
    Man könnte die sicher auch ganz am Anfang der Batch in eine Variable übernehmem, das wäre per Hand sicher immer schnell geändert. Steht diese Versionsnummer dagegen in irgendeinen Dateinamen, gäbe es sicher auch Möglichkeiten sie da raus zu übernehmen.
    Wie auch immer, ich denke das das keine großen Wünsche von dir sind die sich relativ leicht umsetzten lassen. Nur wegen dem Stromsparmodi bin ich nicht sicher, das kenne ich nicht. Würde aber darauf tippen das da eher ein Wert in der Registry geändert werden muss, insofern wird dich sicher jemand finden der das flott umsetzten kann.

  3. Diesen Mitgliedern gefällt dieser Beitrag:


  4. #3
    Senior
    THEMENSTARTER

    Avatar von Uranjitsu
    Registriert
    May 2016
    Beiträge
    210
    Gefällt mir!
    223
    Du gefällst: 158
    Die Versionen werden von ASUS geändert, wir ziehen immer nur die aktuellen Versionen.
    Wann eine neue Version erscheint, entscheidet ASUS.

    Daher müssen die Versionsnummer wie o.b. via RegEx genutzt werden bzw. so das es egal ist, welche Nummer dort steht. Wichtig ist dabei zu beachten "Buchstaben+Zahlen+Bindestrich+Unterstrich+." Das sind alle Zeichen die vorkommen können.

    Und es soll als Batch-File *.bat genutzt werden.

    Ich bekomme es einfach nicht, daher suche ich mir Hilfe hier bei euch und jemanden der kurz dafür mal etwas Zeit aufbringen würde.

    LG
    Geändert von Uranjitsu (12.07.2016 um 18:42 Uhr)

  5. #4
    Orakel von Delphi Avatar von 1stAid
    Registriert
    Dec 2015
    Beiträge
    267
    Gefällt mir!
    86
    Du gefällst: 226
    Zitat Zitat von Uranjitsu Beitrag anzeigen
    Daher müssen die Versionsnummer wie o.b. via RegEx genutzt werden bzw. so das es egal ist, welche Nummer dort steht. Wichtig ist dabei zu beachten "Buchstaben+Zahlen+Bindestrich+Unterstrich+." Das sind alle Zeichen die vorkommen können.
    für welche ordner genau?
    für den WindowsActive ordner würde diese pattern treffen
    Code:
    WindowsActive[\w\.\_]*
    Erklärung
    nach dem string "WindowsActive"
    "[]*" treffe alles was in belibiger Zahl "*" in den "[ ]" Klammern steht.
    "\w" kleines w = alles was Buchstabe oder Zahl ist.
    "\." realer Punkt.
    "\_" realer unterstrich.

    Code:
    System\sReperation\sTool\s\d+\.\d*
    "\s" Leerzeichen
    "\d+" \d Zahl, "+" mindestens 1 mal bis beliebig.
    "\." realer Punkt
    "\d*" Null bis beliebig viele Zahlen

    Wenn du mehrere Ordner hast die Treffen, dann entweder die Versionsnummern auswerten, oder z.B. das Erstelldatum vergleichen.

    Gruß
    Geändert von 1stAid (13.07.2016 um 02:04 Uhr)

  6. Diesen Mitgliedern gefällt dieser Beitrag:


  7. #5
    ROT-26-Spezialist Avatar von Cannonau
    Registriert
    Mar 2015
    Beiträge
    262
    Gefällt mir!
    121
    Du gefällst: 286
    Hallo,

    das sollten wir hinkriegen. :-)

    1. Zur Zeit: ist denn eine Quelle für die aktuelle Zeit verfügbar? Dann sollte das doch automatisch passieren. Wenn man vor nirgendwo die Zeit holen kann, wird's schwierig. Ansonsten sollte ein "W32TM /resync" genügen.
    2. Fensteranordnung: Das geht AFAIK nicht mit Bordmitteln, es gibt aber wohl kleine Zusatztools, die das können und die sich per Batch steuern lassen
    3. LID-Funktion: Da müßte man mehr über die Geräte wissen. Wenn die GUID für dieses Setting auf allen Geräten gleich ist, kann man das über powercfg setzen oder, einfacher noch, auf einem Gerät damit exportieren und dann per Batch auf den anderen importieren
    4. Datum der Ordner: Am besten das Verzeichnis über "dir /O:-D" ausgeben lassen und dann das erste Verzeichnis von oben als das Gesuchte setzen. Regex kannst Du Dir damit ersparen und das ist unter Windows auch gut so ;-)
    Die Cloud heißt Cloud, weil sie Deine Daten cloud.

  8. Diesen Mitgliedern gefällt dieser Beitrag:


  9. #6
    Senior
    THEMENSTARTER

    Avatar von Uranjitsu
    Registriert
    May 2016
    Beiträge
    210
    Gefällt mir!
    223
    Du gefällst: 158
    Hallo ihr zwei,

    vorweg kurz ein Danke dafür das ihr euch die Zeit nimmt um zu helfen.
    Das andere ist, es muss nicht zwingend via *.bat ausgeführt werden, wenn man dafür generell ein kleines Tool schreiben kann, würde das auch helfen.

    @1stAid:
    Auf dem USB-Stick ist folgende Struktur bzw. soll die Struktur aussehen:
    tool./exe/bat/whatever
    WTP 07.07.2016 (Datum ändert sich immer wieder nach einem Update, darum auch hier das RegEx um auf den Ordner zuzugreifen)
    Der Ordner WTP muss angesteuert werden, dann der Ordner "WindowsActive1.6.7.4_20160519" (Auch hier ändert sich 1.6.7.4_20160519 immer) und die darin enthaltene "WindowsActive.exe" gestartet werden.
    Ebenfalls muss der Ordner "asus-wtp\bin" angesteuert werden und die DiagEG.exe gestartet werden.
    Beispielstruktur
    J:\startscript.ENDUNG
    J:\WTP 07.07.2016\WindowsActive1.6.7.4_20160519
    J:\WTP 07.07.2016\asus-wtp\bin

    Beide Programme sofort starten.

    @Cannonou:
    - Die Zeit soll das aktuelle Datum des Tages + Uhrzeit sein. Diese wird wohl via Netzwerk bzw. Internet bezogen.
    Bisher nutze ich dafür diese time.bat
    Spoiler ausklappen

    Code:
    @echo off
    ECHO ZEIT WIRD GESYNCT!
    W32TM /CONFIG /SYNCFROMFLAGS:MANUAL /MANUALPEERLIST:"PTBTIME1.PTB.DE PTBTIME2.PTB.DE" /RELIABLE:YES 
    W32TM /CONFIG /UPDATE 
    W32TM /RESYNC /FORCE
    NET STOP W32TIME 
    NET START W32TIME
    
    Set /P = Enter druecken zum Beenden

    Das soll natürlich das (vllt besser) direkt in das Startscript integriert werden oder gerne auch nur dadurch gestartet werden. Zeit+Datum hat Vorang vor alle anderen Funktionen.
    - Wenn das Oneclick-Tools sind und ansteuerbar, wäre das super !!
    - Die LID-Funktion, sollte eventuell via Registry aus "do-nithing" gestellt werden können. Es geht hier nur um Windows Systeme ab Windows 7 und aufwährts


    Wie gesagt, davon habe ich absolut gar keine Ahnung und muss wirklich die Community dabei um Hilfe/Code/Fertigstellung bitten.
    Und es ist wie gesagt egal, in welcher Sprache das Startscript geschrieben ist... via AutoIt, Delphi, Batch, whatever, hauptsache es würde den Zweck erfüllen.

    EXTRA DATEI: Außerdem wäre noch eine zusätzliche Funktion zum Vorteil sein via Batch(oder ähnliches) in dem Ordner (C:/Test Report/Reports/*PC-SERIENNUMMER*.pdf oder auch mal *.txt den Name der auslesen und in den Zwischenspeicher laden, so das man direkt die Seriennummer via STRG+V wo einfügen kann.

    LG und Danke im Voraus für die Zeit
    - Uranjitsu

    - - - - - - - - - - Beitrag nachträglich erweitert - - - - - - - - - -

    Was ich bisher alleine realisiert habe ist das:

    Spoiler ausklappen
    Code:
    @echo off
    SET WPT=07.07.2016
    SET WA=1.6.7.4_20160519
    
    ECHO ZEIT WIRD GESYNCT
    W32TM /CONFIG /SYNCFROMFLAGS:MANUAL /MANUALPEERLIST:"PTBTIME1.PTB.DE PTBTIME2.PTB.DE" /RELIABLE:YES 
    W32TM /CONFIG /UPDATE 
    W32TM /RESYNC /FORCE
    NET STOP W32TIME 
    NET START W32TIME
    
    ECHO TOOLS STARTEN
    start "WindowsActive" "WTP %WPT%\WindowsActive%WA%\WindowsActive.exe"
    start "SystemTool" "WTP %WPT%\asus-wtp\bin\DiagEG.exe"
    
    ECHO ZEIT WIRD NOCH EINMAL GESYNCT!
    W32TM /CONFIG /SYNCFROMFLAGS:MANUAL /MANUALPEERLIST:"PTBTIME1.PTB.DE PTBTIME2.PTB.DE" /RELIABLE:YES 
    W32TM /CONFIG /UPDATE 
    W32TM /RESYNC /FORCE
    NET STOP W32TIME 
    NET START W32TIME
    
    Set /P = Enter druecken zum Beenden


    Und das ist alles andere als wirklich gut. Die RegEx Angaben kann ich leider nicht verwenden, welche 1stAid vorgegeben hat :/
    Fenster verschieben, also positionieren... keine Ahnung
    Geändert von Uranjitsu (13.07.2016 um 19:55 Uhr)

  10. #7
    ROT-26-Spezialist Avatar von Cannonau
    Registriert
    Mar 2015
    Beiträge
    262
    Gefällt mir!
    121
    Du gefällst: 286
    Für die LID-Sache, die Verschiebung und die Seriennummer sollten wir uns mal kurzzschließen, ich schicke Dir eine PN.

    Der Rest dürfte hiermit erschlagen sein. Mein Script sucht sich immer die beiden EXEn aus dem neusten Verzeichnis (Erstellungsdatum des Verzeichnisses und Variable _asustag sind ausschlaggebend, Datum im Verzeichnisnamen wird nicht berücksichtigt).

    Deinen Timesync-Code habe ich einfach übernommen, ich gehe davon aus, daß er getestet ist und für Deine Umgebung funktioniert.

    Die drei Variablen bei Bedarf einfach anpassen ;-)

    Code:
    @echo off
    :::::::::::::::::::::::::
    :: Init - hier koennen die Variablen nach Bedarf angepasst werden
    
    set _root=%~dp0\
    set _asustag=WTP
    set _activetag=Active
    
    :::::::::::::::::::::::::
    PUSHd %_root%
    call :GET_NEWEST_DIR
    PUSHd %_newestdir%
    call :GET_ACTIVE_DIR
    POPd
    call :TIMESYNC
    POPd
    start "WindowsActive" "%cd%\%_newestdir%\%_activedir%\WindowsActive.exe"
    start "SystemTool" "%cd%\%_newestdir%\asus-wtp\bin\DiagEG.exe"
    GOTO:eof
    
    :GET_ACTIVE_DIR:
    for /F "tokens=4 usebackq" %%A in (`dir *%_activetag%* ^| find "%_activetag%"`) do set _activedir=%%A
    GOTO:eof
    
    :GET_NEWEST_DIR:
    for /F "tokens=4,5 usebackq" %%D in (`dir *%_asustag%* /O:D ^| find "%_asustag%"`) do set _newestdir=%%D %%E
    GOTO:eof
    
    :TIMESYNC:
    W32TM /CONFIG /SYNCFROMFLAGS:MANUAL /MANUALPEERLIST:"PTBTIME1.PTB.DE PTBTIME2.PTB.DE" /RELIABLE:YES 
    W32TM /CONFIG /UPDATE 
    W32TM /RESYNC /FORCE
    NET STOP W32TIME 
    NET START W32TIME
    GOTO:eof
    Cannonau

    Edith sagt: Kleinen Kniff eingebaut, falls der Laufwerksbuchstabe des Sticks sich mal ändert ;-)
    Geändert von Cannonau (15.07.2016 um 12:09 Uhr)
    Die Cloud heißt Cloud, weil sie Deine Daten cloud.

  11. #8
    Senior
    THEMENSTARTER

    Avatar von Uranjitsu
    Registriert
    May 2016
    Beiträge
    210
    Gefällt mir!
    223
    Du gefällst: 158
    Grüße Dich,

    herzlichen Dank für deine bisherige Hilfe - Saustark !

    Jetzt gibt es leider ein Problem.

    Ich habe nun auch via Autoit etwas realisieren können(natürlich nur semi).
    Das Problem ist, dass DiagEG.exe extern den Aufruf verweigert.
    Startet man es direkt vom Stick in der dafür von ASUS erstellten Administrationsoberfläche, ist das kein Problem.
    Startet man diese via Autoit oder Batch, wird sie kurz gestartet und beendet.

    Jetzt habe ich nun via Autoit das so geschrieben, dass sich für die DiagEG.exe ein Fenster mit einem Button öffnen. Über den Button kann diese dann wie gewohnt gestartet werden. Jetzt wollte ich den Klick auf den Button auch automatisieren um ein möglichst automatischen Start zu gestalten.

    Spoiler ausklappen

    Code:
    #comments-start
    ShellExecute('time.bat') ; TIME.BAT STARTEN
    Sleep(5000)
    ShellExecute('WTP ' & $WTP & '\WindowsActive' & $WA & '\WindowsActive.exe') ; WINDOWS ACTIVE STARTEN
    Sleep(5000)
    ShellExecute('WTP ' & $WTP & '\asus-wtp\bin\DiagEG.exe')                    ; DIAGEG.EXE STARTEN
    Sleep(5000)
    ShellExecute('time.bat')                                                   ; TIME.BAT STARTEN
    #comments-end
    
    #RequireAdmin
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <StaticConstants.au3>
    
    ShellExecute('time.bat') ; TIME.BAT STARTEN
    Sleep(2000)
    WindowsActive()
    Sleep(2000)
    DiaEG()
    
    Func WindowsActive()
    ; TOOL VERSIONEN
    $WA   = "1.6.7.4_20160519"      ; WINDOWS ACTIVE VERSION
    $SRT  = "3.14"                ; REPERATION TOOL
    
    Global $titel1 = 'WindowsActive'                          ; WINDOWS ACTIVE FENSTERNAME
    Global $titel2 = 'Systeme Preparation Tool' & $SRT & ''      ; SYSTEME REPERATION TOOL FENSTERNAME
    
    
        ; Run WindowsActive with the window maximized.
        Run("WTP\WindowsActive" & $WA & "\WindowsActive.exe", "", @SW_SHOWMAXIMIZED)
    
        ; Wait 10 seconds for the WindowsActive window to appear.
        WinWait("[CLASS:WindowsActive]", "", 10)
    
        ; Wait for 2 seconds.
        Sleep(2000)
    
    ; FINDE DAS FENSTER UND POSITIONIERE
    If WinExists($titel1) Then
    WinActivate($titel1)
    WinWait($titel1)
    Local $aPos = WinGetPos($titel1)
    WinMove($titel1,"",1,1,$aPos[2],$aPos[3])
    EndIf
    
    If Not WinExists($titel1) Then
    Beep(500, 1000)
    EndIf
    
    EndFunc   ;==>WindowsActive
    Sleep(2000)
    ShellExecute('time.bat') ; TIME.BAT STARTEN
    
    Func DiaEG()
    $WA   = "1.6.7.4_20160519"      ; WINDOWS ACTIVE VERSION
    
    $Form1_1 = GUICreate("DiaEG", 366, 341, 363, 324)
    GUISetBkColor(0x434E54)
    $Button1 = GUICtrlCreateButton("DiaEG Starten", 0, 48, 139, 49, $WS_GROUP)
    GUISetState(@SW_SHOW)
    While 1
    	$nMsg = GUIGetMsg()
    	Switch $nMsg
    		Case $GUI_EVENT_CLOSE
    			Exit
    		Case $Button1
    			Run ( "WTP\asus-wtp\bin\DiagEG.exe", "WTP\asus-wtp\bin\")      ; normales spiel für single player und online
    			Exit
    	EndSwitch
    WEnd
    EndFunc   ;==>WindowsActive


    Ich weis, der Code ist grässlich, aber das war bisher das einzige was funktioniert.

  12. #9
    ROT-26-Spezialist Avatar von Cannonau
    Registriert
    Mar 2015
    Beiträge
    262
    Gefällt mir!
    121
    Du gefällst: 286
    Wie der Code aussieht, ist doch erstmal egal, solange Du ihn noch warten kannst. :-)

    Ich kenne mich mit AI nicht aus - aber das ist doch gerade dafür geschrieben worden, Mausklicks zu usw. zu simulieren, oder? Funktioniert das denn wie gewünscht?

    Ansonsten, wenn Du weiter den Batch-Weg gehen willst, mal mit WMIC schauen, ob diese EXEn einen bestimmten Aufrufparameter brauchen, einfach nach dem Start über das CLI eingeben:

    Code:
    wmic PROCESS where "commandline like '%iagE%'" get Processid, Caption, Commandline
    Die Aufrufe aus der Batch dann entsprechend ergänzen und testen. Oder den Output posten ;-)

    Cannonau
    Geändert von Cannonau (15.07.2016 um 21:49 Uhr)
    Die Cloud heißt Cloud, weil sie Deine Daten cloud.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  
SzeneBox.org... im Mittelpunkt der Szene!
© since 2015 szeneBOX.org - All Rights Reserved
Domains: www.szenebox.org