müsste nochmals eure Hilfe in Anspruch nehmen. Wenn ich das Script starte, wird der Stick erkannt und soll alle Dateien & Ordner auf díe Festplatte in einen Backup Ordner kopieren. In der MsgBox werden die Files angezeigt, aber kopiert wird nichts. Das ganze sollte noch in einer Schleife liegen, auch wenn kein Stick drinn ist.´Hoffentlioch hat da einer ne Lösung.
Usb Backup
-
- [ offen ]
-
XP-User -
14. Januar 2010 um 22:47 -
Geschlossen -
Erledigt
-
-
[autoit]
[/autoit][autoit][/autoit][autoit]
$stick = DriveGetDrive("REMOVABLE")DirCreate("UsbBackup") ; erzeugt einen Ordner, aber wo ? Im aktuellen Arbeitsverzeichnis ?
[/autoit][autoit][/autoit][autoit]If $stick[0] <> 0 Then
[/autoit][autoit][/autoit][autoit]
For $i = 1 To $stick[0] ; durchläuft alle Wechseldatenträger, nicht nur den der angesteckt ist
$datei = FileFindFirstFile($stick[$i] & "*"); öffnet auf jedem Datenträger ein Handle in der gleichen Variable, wobei nur das letzte überbleibt
Next
EndIfWhile 1
[/autoit]
$file = FileFindNextFile($datei); durchläuft das LETZTE Such-Handle
If @error Then ExitLoop ; und bricht am letzten Objekt des Ordners ab
DirMove($file, "UsbBackup"); verschiebt nur Ordner incl. Sub/Files - aber keine Datei-Objekte direkt
MsgBox(0, "", $file, 1)
WEndIch glaube das sind so viele Probleme drin, das man das ganze neu aufbauen sollte. Ich habe mal einiges im Quellcode kommentiert...
-
ja OK, aber haste auch ne Idee dafür, meine ja in der Msgbox werden die Dateien ja ángezeigt.
statt DirMove sollte eigentlich DirCopy hin.
-
[autoit]
$stickname = "Name des USB-Sticks" ; zum erkennen welcher Stick
[/autoit][autoit][/autoit][autoit]
$stick = DriveGetDrive("REMOVABLE")If Not FileExists(@ScriptDir & "\UsbBackup") Then DirCreate(@ScriptDir & "\UsbBackup")
[/autoit][autoit][/autoit][autoit]If $stick[0] <> 0 Then
[/autoit]
For $i = 1 To $stick[0]
If DriveGetLabel($stick[$i]) = $stickname Then ; meinen USB-Stick erkannt
$search = FileFindFirstFile($stick[$i] & "*")
While True
$object = FileFindNextFile($search)
If @error Then ExitLoop
If StringInStr(FileGetAttrib($stick[$i] & "\" & $object),"D") > 0 Then ; Ordner erkannt
DirCopy($stick[$i] & "\" & $object, @ScriptDir & "\UsbBackup\" & $object) ; hier ggf. ",1" wenn überschrieben werden soll
Else
FileCopy($stick[$i] & "\" & $object, @ScriptDir & "\UsbBackup\" & $object) ; hier ggf. auch ",1"
EndIf
Wend
FileClose($search)
EndIf
Next
EndIfSo könnte es klappen !
-
Ja Danke dir, so gehts prima.
Aber wie bekomme ich das ganze in eine Schleife, auch ohne das ein Stick drinne ist.
-
Einfachste Art:
Am Anfang des Scripts "While True" und am Ende "Wend".
Schon läuft es endlos. Ist aber dann auch nur noch mit Taskmanager zu beenden. Und Du solltest noch ein geringes "Sleep()" in die "While-Wend-Schleife" nehmen, da sonst die Schleife, sollte kein USB-Stick zum Kopieren erkannt werden, zu schnell/oft läuft und den Rechner stark auslastet.
-
der Gedanke ist mir ja auch schon gekommen, wenn ich das Script starte kommt hier bei raus.
C:\Documents and Settings\.........\U1.au3 (6) : ==> Subscript used with non-Array variable.:
dan´n muss aber die erste Zeile auch geändert werden
von IF $stick[0] <> 0 Then nach IF $stick <> 0 Then
so gehts ohne Fehler.
-
von IF $stick[0] <> 0 Then nach IF $stick <> 0 Then
Besser :
[autoit]If IsArray($stick) Then
[/autoit]