Wie kann ich mit Autoit den ersten freien Laufwerksbuchstaben ermitteln?
Oder falls das nicht so einfach möglich ist, kann ich abfragen welchen Laufwerksbuchstaben ein Medium mit einem bestimmten Namen hat?
Wie kann ich mit Autoit den ersten freien Laufwerksbuchstaben ermitteln?
Oder falls das nicht so einfach möglich ist, kann ich abfragen welchen Laufwerksbuchstaben ein Medium mit einem bestimmten Namen hat?
Ich hab mal ne kleine Funktion dafür gebastelt... (oben die Beispiele)
$tmp=_getFirstFreeDrive()
if NOT @error then
msgbox(48,"",$tmp)
else
msgbox(48,"","Error: "&@error)
endif
$tmp=_getFirstFreeDrive(2)
if NOT @error then
msgbox(48,"",$tmp)
else
msgbox(48,"","Error: "&@error)
endif
$tmp=_getFirstFreeDrive("r")
if NOT @error then
msgbox(48,"",$tmp)
else
msgbox(48,"","Error: "&@error)
endif
; ===============================================================================================================================
; Name...........: _getFirstFreeDrive
; Description ...: Gives a few drive
; Syntax.........: _getFirstFreeDrive($min=-1)
; Parameters ....: $min - where to start. Use a number (X) to skip X free Drives.
; Use a letter (a-z) to give the startpoint.
; Return values .: e.g. c: - letter of the Drive with a colon
; -1 - Error
; Author ........: Kanashius
; Error .........: 1 - $min was no number between 1 and 26 and no letter between a and z
; 2 - no free Drive found
; ===============================================================================================================================
Func _getFirstFreeDrive($min=-1)
local $start=97,$count=0,$doCount=false
if IsInt($min) and $min<>-1 then
$doCount=true
elseif $min<>-1 then
$asc=Asc($min)
if $asc>64 and $asc<91 then
$asc+=32
endif
if $asc>96 and $asc<123 then
$start=$asc
else
SetError(1)
return -1
endif
endif
$ar=DriveGetDrive("ALL")
if $start>122 then
SetError(1)
return -1
endif
for $i=$start to 122 step 1
if NOT $doCount then
$found=false
for $l=0 to UBound($ar)-1 step 1
if $ar[$l]=Chr($i)&":" then
$found=true
endif
next
if NOT $found then
return Chr($i)&":"
endif
else
$count+=1
if $count=$min then
$doCount=false
endif
endif
next
SetError(2)
return -1
EndFunc
DriveGetDrive liefert eine Liste aller Laufwerke. In einer Schleife lässt sich prüfen, welche Buchstaben belegt sind.
Dieses Beispiel zeigt alle freien Laufwerksbuchstaben:
[autoit]#include <Array.au3>
$aDrives = DriveGetDrive("All")
$sDrives = _ArrayToString($aDrives, "|", 1) & "|"
For $i = 97 to 122
If StringInStr($sDrives, Chr($i) & ":|") = 0 Then ConsoleWrite(Chr($i) & @CRLF)
Next
Super, danke!
Könnte man jetzt trotzdem noch irgendwie prüfen ob ein Laufwerk existiert mit einem Bestimmten Namen?
Ich möchte gerne wenn ich das AutoIt Programm geschlossen habe und erneut öffne, prüfen ob dieses Laufwerk bereits verbunden ist.
DriveGetDrive("All") gibt dir alle laufwerke als array. einfach dadurch laufen und gucken, ob dein buchstabe in einem der array-einträge vorhanden ist.
Ich brauch die Funktion zwar nicht, hab die aus neugier aber grade mal getestet und "der Computer sagt" mir das abc auf
Könnte man jetzt trotzdem noch irgendwie prüfen ob ein Laufwerk existiert mit einem Bestimmten Namen?
DriveGetLabel gibt Dir den Namen eines Laufwerkes zurück.
Kann mit dabei jemand helfen?
Das besagte Laufwerk nennt sich PRIVAT
#include <Array.au3>
$searchName = "PRIVAT"
$aDrives = DriveGetDrive("All")
For $i = 1 to $aDrives[0]
If DriveGetLabel($aDrives[$i])= $searchName Then
MsgBox(0,"","gefunden")
ExitLoop
EndIf
Next
Super, danke dir.
Die Schleife läuft aber auch wenn das Laufwerk gefunden wurde endlos weiter, oder?
Läßt sich das ganze auch in eine Funktion packen?
Damit ich damit Abfragen kann.
Nee, wenn das Laufwerk gefunden wurde, wird die Schleife mit ExitLoop ja verlassen.
Ja, das lässt sich in eine Funktion packen. Das solltest Du aber selber hinkriegen, oder?
Und wenn es nicht gefunden wird?
Dann läuft es ewig, oder?
Oder checkt er nur ein mal alle vorhandenen verbundenen Laufwerke durch?
Ich habe das jetzt so versucht:
Func _getDriveLabel()
$searchName = "PRIVAT"
$aDrives = DriveGetDrive("All")
For $i = 1 to $aDrives[0]
If DriveGetLabel($aDrives[$i])= $searchName Then
ExitLoop
EndIf
Next
Return StringUpper($aDrives[$i])
EndFunc
wenn das Laufwerk vohanden ist funktioniert es. Aber wenn nicht bricht das Script ab.
Oder das hier. Gibt entweder den Laufwerksbuchstaben zurück oder "".
[autoit]$sDrive = _getDriveLabel("PRIVAT")
Func _getDriveLabel($sLabel)
$aDrives = DriveGetDrive("All")
For $i = 1 to $aDrives[0]
If DriveGetLabel($aDrives[$i])= $sLabel Then Return $aDrives[$i]
Next
Return ""
EndFunc