Laufwerksbuchstaben ermitteln und an ein DOS Batch übergeben ...

  • Hallo zusammen,
    ich habe da mal wieder ein 'Problem' und hoffe jemand kann mir ggf. den ein oder anderen Tip geben.

    Also was mache ich:

    ich ermittle via Autoit den aktuellen Laufwerksbuchstaben der angehängten (USB Port) Festplatte, indem ich auf ein file prüfe.
    Das funktioniert soweit erst einmal.

    Dann muss/will ich diese Information an einen (DOS)Batch übergeben, der im Adminkontext gestartet werden muss.
    (dieses zugegebenermassen einfache batchfile kommt von DATEV und soll nicht 'angefasst werden' - daher die Sache mit dem Batch)
    D.h. ich starte das Ganze mit RunAsWait und muss dabei den aktuellen LW-Buchstaben übergeben - was mir nicht gelingt.


    Hat jemand einen Tipp für mich ?


    Spoiler anzeigen


    Check for connected external HDD
    $arcdeDrive = DriveGetDrive("ALL")
    For $i = 1 To $arcdeDrive[0]
    $strDriveType = DriveGetType($arcdeDrive[$i])
    If $strDriveType = "CDROM" Or $strDriveType = "NETWORK" Then ContinueLoop
    $cdeDrive = $arcdeDrive[$i]
    $cdeFile = $cdeDrive & "\Witch.id"
    If FileExists($cdeFile) Then ExitLoop
    $cdeDrive = ""
    $cdeFile = ""
    Next
    Local $sUserName = "XYZ"
    Local $sPassword = "123456789"

    ;Start backup routine
    $cdeDrive = $cdeDrive & "\"
    If $cdeFile <> "" Then
    TrayTip("Backup läuft", "Sicherung auf ext. Datenträger",10,1)
    MsgBox(64,"Datensicherung", "Start der Sicherung - Bitte warten ...",2)
    RunAsWait($sUserName, @Computername, $sPassword, 0, "c:\xyz\sicherung.bat" & $cdeDrive, @WorkingDir) <--- hier muss das LW übergeben werden
    TrayTip("clears any tray tip","",0)
    SplashTextOn("Datensicherung", "Die Daten wurden erfolgreich gesichert...", 350, 70, -1, -1, 32, "", 10)
    $cdeStatus = "OK"
    SplashOff()
    Else
    MsgBox(16,"Datensicherung", " Der ext. Datenträger konnte nicht gefunden werden." _
    & @CRLF & @CRLF & "Bitte das LW anschliessen + die Datensicherung erneut starten !!!")
    $cdeStatus = "NIOK"

    hier batch, wobei der Laufwerksbuchstabe z: durch den mit Autoit ermittelten Buchstaben ersetzt werden muss.
    @ECHO OFF
    ECHO "Datensicherung Laptop"
    ECHO."-------------------------------"
    net stop MSSQL$DATEV_CL_DE01
    robocopy C:\datev\daten z:\Datev_Datensicherung /MIR /R:2 /W:2 /LOG:BkpRobo.log /NS /NC /TEE /FFT
    robocopy C:\xyz\ z:\ /MIR /R:2 /W:2 /LOG+:BkpRobo.log /NS /NC /TEE
    ECHO."-----------------------------------------------------"
    ECHO "Ein ausführliches LOG ist zu finden unter uhnBkpRobo.log"
    net start MSSQL$DATEV_CL_DE01
    Exit


    schon eimal ein weihnachtliches Danke an alle

    Gruss
    ugt100

  • Ich verstehe den Pfad hier nicht ganz:

    [autoit]

    RunAsWait($sUserName, @ComputerName, $sPassword, 0, "c:\xyz\sicherung.bat" & $cdeDrive, @WorkingDir) < - - - hier muss das LW übergeben werden

    [/autoit]


    Dabei kommt "c:\xyz\sicherung.batc:" raus angenommen das Laufwerk wäre c. Ich glaube nicht, dass das passt

  • Hi Milla,

    anfangs dachte ich, ich könnte den ermittelten Laufwerksbuchstaben einfach als Parameter an den Batch übergeben. Das funktioniert aber nicht,
    musste ich feststellen.

    Einmal angenommen (z.B.) X:\ wurde als aktueller LW Buchstabe ermittelt, dann muss auch X:\ im Batch benutzt werden.
    Also .....
    robocopy C:\datev\daten X:\Datev_Datensicherung /MIR /R:2 /W:2 /LOG:BkpRobo.log /NS /NC /TEE /FFT
    robocopy C:\xyz\ X:\ /MIR /R:2 /W:2 /LOG+:BkpRobo.log /NS /NC /TEE

    Die Übergabe ist mein Problem.


    Ich hoffe jetzt ist das Problem besser beschrieben.


    Gruss
    ugt100

  • [autoit]

    RunAsWait($sUserName, @ComputerName, $sPassword, 0, "c:\xyz\sicherung.bat " & $cdeDrive & "\", @WorkingDir)

    [/autoit]


    Dann so oder nicht?

  • Dein Batch müsste das LW als Parameter erwarten ansonsten kannst Du da nix in die Kommandozeile bringen. Du hast ja in die Batch schon fest eingetragen das er LW Z. nehmen soll.

    Die Batch müsste dann so aussehen

    @ECHO OFF
    ECHO "Datensicherung Laptop"
    ECHO."-------------------------------"
    net stop MSSQL$DATEV_CL_DE01
    robocopy C:\datev\daten %1:\Datev_Datensicherung /MIR /R:2 /W:2 /LOG:BkpRobo.log /NS /NC /TEE /FFT
    robocopy C:\xyz\ %1:\ /MIR /R:2 /W:2 /LOG+:BkpRobo.log /NS /NC /TEE
    ECHO."-----------------------------------------------------"
    ECHO "Ein ausführliches LOG ist zu finden unter uhnBkpRobo.log"
    net start MSSQL$DATEV_CL_DE01
    Exit

    Dann wird der Buchstabe den Du ermittelt hast als %1 in die Batch übergeben

    Je nachdem ob Du nur c, c: oder c:\ reingibst musst Du dann anpassen.

    LG

    Schnuecks