Laufwerke formatieren und neu beschreien

  • Hallo alle zusammen,

    bin absoluter Neuling und brauche ein bischen Hilfe!!!

    Ich möchte mehrere USB Wechseldatenträger (USB 1.1) formatieren und anschliessend alle mit dem Inhalt eines Orners beschreiben.

    Dazu habe ich folgendes geschrieben:

    Das funktionier soweit auch nicht schlecht!!


    Und jetzt zu meinem Problem:

    1. Beim Löschen werden nur Dateien gelöscht. Ordner die sich auf dem
    auf dem Laufwerk befinden werden nicht gelöscht.

    2. Beim beschreiben der Laufwerke, werden diese nacheinander
    beschieben. Dadurch dauert der Kopiervorgang sehr lange (Alle Lauf
    werke sind USB 1.1).
    Um Zeit zu gewinnen würde ich gerne alle Laufwerke parallel
    beschreiben. (Bei WINXP ist das möglich).

    3. Wie kann ich ein Laufwerk nicht nur löschen, sondern auch formatieren?

    Vielen Dank für Eure Hilfe.

  • Moin,

    hab hier nen Script gefunden zum formatieren:

    [autoit][/autoit][autoit][/autoit][autoit]

    #include <Constants.au3>
    SplashTextOn("","Formatting Drive/s" & @CRLF & "Please Wait..","300","100","-1","-1",33,"Courier New","20","700")
    Sleep (1000)
    $var = DriveGetType( "D:\" )

    [/autoit][autoit][/autoit][autoit]

    If $var = "Fixed" Then
    DriveSetLabel("D:\", "Y")
    $pid = Run(@ComSpec & " /c " & 'format D: /v:Disk2 /fs:fat32 /q /x', "",@SW_HIDE, $STDIN_CHILD)
    StdinWrite($pid, "Y" & @CRLF & "Y" & @CRLF)
    ProcessWaitClose($pid)
    EndIf

    [/autoit][autoit][/autoit][autoit]

    $var2 = DriveGetType( "E:\" )

    [/autoit][autoit][/autoit][autoit]

    If $var2 = "Fixed" Then
    DriveSetLabel("E:\", "Y")
    $pid = Run(@ComSpec & " /c " & 'format E: /v:Disk3 /fs:fat32 /q /x', "",@SW_HIDE, $STDIN_CHILD)
    StdinWrite($pid, "Y" & @CRLF & "Y" & @CRLF)
    ProcessWaitClose($pid)
    EndIf

    [/autoit][autoit][/autoit][autoit]

    $var3 = DriveGetType( "F:\" )

    [/autoit][autoit][/autoit][autoit]

    If $var3 = "Fixed" Then
    DriveSetLabel("F:\", "Y")
    $pid = Run(@ComSpec & " /c " & 'format F: /v:Disk4 /fs:fat32 /q /x', "",@SW_HIDE, $STDIN_CHILD)
    StdinWrite($pid, "Y" & @CRLF & "Y" & @CRLF)
    ProcessWaitClose($pid)
    EndIf
    SplashTextOn("","Formatting Complete","350","100","-1","-1",33,"Courier New","20","700")
    Sleep (3000)
    Exit

    [/autoit]

    Sollte dir wohl helfen

    Mfg

    Analyzer

    • Offizieller Beitrag

    Hallo und herzlich :willkommen:

    Diese beiden probleme lassen sich mit einfachen cmd befehlen lösen!
    einmal mit "format" und einmal mit "xcopy". Ansonsten hast du noch ein paar andere fehler gemacht! DriveGetDrive gibt ein array zurück!

    Naja.. bevor ich dir das 5 stunden hier erkläre hab ichs dir einfach mal umgeschrieben! (und das hat auch ca 5 stunden gedeuert :D )

    Spoiler anzeigen
    [autoit]


    ;alle Wechseldatenträger ermitteln
    $var = DriveGetDrive("removable")

    [/autoit] [autoit][/autoit] [autoit]

    If Not @error Then
    For $i = 1 To $var[0]
    ;Speichergröße der Datenträger ermitteln
    $x = DriveSpaceTotal($var[$i])
    ;Liegt die Speichergröße zwischen 30 MB und 4 GB
    ;soll das Laufwerk gelöscht werden
    If $x > 30 And $x < 4000 Then
    MsgBox(0,"",$var[$i])
    $pid = Run(@ComSpec & " /c " & 'format '&$var[$i]&' /q /x', "",@SW_HIDE, 1)
    StdinWrite($pid, "Y" & @CRLF & "Y" & @CRLF & "N"& @CRLF)
    While ProcessExists($pid)
    Sleep(100)
    WEnd
    EndIf
    Next
    ;Speichergröße der Datenträger ermitteln
    For $i = 1 To $var[0]
    $x = DriveSpaceTotal($var[$i])
    If $x > 30 And $x < 4000 Then Run(@ComSpec & ' /c xcopy D:\Kopier_Programm '&$var[$i]&' /E /H /Y', '', @SW_HIDE)
    Next
    MsgBox(0, " Kopier Programm ", " Fertig ")
    EndIf

    [/autoit]

    So solte es nun gehen

    Mfg Spider

  • Hallo zusammen,

    vielen Dank für die herzliche Aufnahme und den schnellen Antworten!!! :kette:


    Werde beide Vorschläge ausprobieren und Bericht erstatten!


    mfg

  • hallo gtaspider und Analyzer,

    beide Vorschläge haben in Bezug auf die Formatierung nicht zum gewünschten Ergebnis geführt!!!

    Das gleichzeitige bespielen der Laufwerke funktioniert einwandfrei!!!

    Code
    If $x > 30 And $x < 4000 Then
                            MsgBox(0,"",$var[$i])
                            $pid = Run(@ComSpec & " /c " & 'format '&$var[$i]&' /q /x', "",@SW_HIDE, 1)
                            StdinWrite($pid, "Y" & @CRLF & "Y" & @CRLF & "N"& @CRLF)
                            While ProcessExists($pid)
                                    Sleep(100)
                            WEnd

    Dieser Code hat keinen Effekt! Der USB Stick wird nicht formatiert. Habe leider keine Ahnung warum es nicht funktioniert :hammer:

    Dann habe ich den Code wie folgend geändert:

    Code
    If $x > 30 And $x < 4000 Then
                            $pid = Run(@ComSpec & ' /c format '&$var[$i] &' /v:USB-Stick /fs:fat32 /q /x ', "",$STDIN_CHILD)
    						sleep(100)
    						StdinWrite($pid, Send("{ENTER}"))
    						ProcessWaitClose($pid)
                            While ProcessExists($pid)
                                    Sleep(100)
                            WEnd
    					EndIf

    Jetzt öffnet sich die Eingabeaufforderung und ich kann den kompl. Ablauf der Formatierung auf den Bildschirm beobachten.

    Ich habe mir das Ganze zwar nicht so vorgestellt, aber immerhin - es funktioniert.

    Kann mir jemand sagen warum die Formatierung mit dem ersten Code bei mir nicht funktioniert????


    mfg

  • Hallo,
    es geht auch noch etwas einfacher:

    [autoit]

    if $x > 30 And $x < 4000 Then
    MsgBox(0,"",$var[$i])
    $pid = Run(@ComSpec & " /c " & 'format ' & $var[$i] & ' /q /y', "",@SW_HIDE, 1); mit "/y" wird keine Bestätigung gefordert
    While ProcessExists($pid)
    Sleep(100)
    WEnd

    [/autoit]


    eddy_erpel

  • Sorry Leute,

    Der Befehl:

    [autoit][/autoit][autoit][/autoit][autoit]

    if $x > 30 And $x < 4000 Then
    MsgBox(0,"",$var[$i])
    $pid = Run(@ComSpec & " /c " & 'format ' & $var[$i] & ' /q /y', "",@SW_HIDE, 1); mit "/y" wird keine Bestätigung gefordert
    While ProcessExists($pid)
    Sleep(100)
    WEnd

    [/autoit]

    funktioniert bei mir nicht. Ich Bekomme folgende Fehlermeldung (Siehe Anhang).

    Ändere ich den Befehl wie folgt:

    [autoit]


    $pid = Run(@ComSpec & " /c " & 'format ' & $var[$i] & '/v:USB-Stick /fs:fat32 /q /y', "",@SW_HIDE, 1)

    [/autoit]

    erscheind die Fehlermeldung nicht, aber der Stick wird nicht formatiert.

    Hat jemand eine Ahnung warum???


    mfg