Freies Laufwerk ermitteln Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Filzfrosch
Posts: 64
Joined: 18 Feb 2017, 08:39
Location: Hamburg / Germany

Freies Laufwerk ermitteln

Post by Filzfrosch » 03 Jan 2021, 16:33

Moin,

ich versuche jetzt seit einiger Zeit vergeblich vor dem Setzen eines Netzlaufwerks (mit net use) zu prüfen, welcher freie Laufwerksbuchstabe zur Verfügung steht.
Ich habe über das Kommando

Code: Select all

DriveGet, LWList, List
einen String aller zur Zeit vergebenen Laufwerksbuchstaben. (z.B. CDEFGHIXZ).
Jetzt möchte ich, dass von Z nach A geprüft wird, welcher Buchstabe frei wäre (in diesem Beispiel also Y).
Wie dann das Laufwerk mit dem freien Laufwerksbuchstaben verbunden wird ist kein Problem, aber die Buchstabenprüfung selber scheitert kläglich ...
Ich habe es versucht mit If InStr(LWList1,Z) usw. aber dabei findet er im obigen Beispiel ein Y obwohl keines dabei ist.
Außerdem muss so natürlich jeder Buchstabe einzeln geprüft werden, bis ein freier gefunden wurde. Dadurch wird das Script natürlich ellenlang.
Ich denke, da gibt es bestimmt eine viel kleinere, kompaktere Lösung.
Wer greift mir kurz mal unter die Arme?
Dank im Voraus!

Grüße
KHA
Posts: 403
Joined: 21 Aug 2018, 11:11

Re: Freies Laufwerk ermitteln

Post by KHA » 03 Jan 2021, 17:00

Spontan fällt mir, sowas ein:

Code: Select all

DriveGet, LaufwerkBuschStabe, List, 
;LaufwerkBuschStabe := "CDEFGHIXZ"
AnzahlBuchstaben := StrSplit(LaufwerkBuschStabe).MaxIndex()

For Each, Zeichen In StrSplit("ZYXWVUTSRQPONMLKJIHGFEDCBA")
{
Buchstabe := StrSplit(LaufwerkBuschStabe)[AnzahlBuchstaben]
	if (Buchstabe != Zeichen)
	{
	FreieBuchstabe := Zeichen
	break
	}
AnzahlBuchstaben--
}

MsgBox, % FreieBuchstabe
Filzfrosch
Posts: 64
Joined: 18 Feb 2017, 08:39
Location: Hamburg / Germany

Re: Freies Laufwerk ermitteln

Post by Filzfrosch » 03 Jan 2021, 17:20

Danke, hab den Code an mein Script angepasst und klappt jetzt super!
Vielen Dank!

Vor allem sind es nur ein paar Zeilen Code, gegen meinen davor .... :roll:
Merry Crisis and a happy new fear
KHA
Posts: 403
Joined: 21 Aug 2018, 11:11

Re: Freies Laufwerk ermitteln

Post by KHA » 03 Jan 2021, 17:25

Idee 2: vlt. ist es einfacher

Code: Select all

DriveGet, LaufwerkBuschStabe, List,
AnzahlBuchstaben := StrSplit(LaufwerkBuschStabe).MaxIndex()

Loop, 26
{
Großbuchstabe := Chr(91 - A_Index)
Buchstabe := StrSplit(LaufwerkBuschStabe)[AnzahlBuchstaben]
	if (Buchstabe != Großbuchstabe)
	{
	FreieBuchstabe := Großbuchstabe
	break
	}
AnzahlBuchstaben--
}
MsgBox, % FreieBuchstabe
User avatar
haichen
Posts: 631
Joined: 09 Feb 2014, 08:24

Re: Freies Laufwerk ermitteln

Post by haichen » 04 Jan 2021, 02:27

Hier noch eine etwas kürzere Variante:

Code: Select all

DriveGet, LaufwerkBuschStabe, List
FreieLWBuchstaben :="CDEFGHIJKLMNOPQRSTUVWXYZ"
Loop, parse, LaufwerkBuschStabe
     FreieLWBuchstaben := StrReplace(FreieLWBuchstaben, A_LoopField, "",, 1)

msgbox, % FreieLWBuchstaben
just me
Posts: 9442
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Freies Laufwerk ermitteln  Topic is solved

Post by just me » 04 Jan 2021, 04:50

Moin,

für die Freunde von 'weniger Zeilen ist mehr': ;)

Code: Select all

LWList := "CDEFGHIXYZ" ; <<<<< Test
LWB := SubStr(RegExReplace("CDEFGHIJKLMNOPQRSTUVWXYZ", "[" . LWList . "]"), 0)
MsgBox, %LWB%
User avatar
haichen
Posts: 631
Joined: 09 Feb 2014, 08:24

Re: Freies Laufwerk ermitteln

Post by haichen » 04 Jan 2021, 05:50

Aaaaah. Ooooh. Toll. Der Regexp ist klasse!! :bravo:
BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Freies Laufwerk ermitteln

Post by BoBo » 04 Jan 2021, 06:57

@just me :thumbup:
Ich hatte zwztl an einen ASCII-Wertabgleich gedacht.
Ähm, was genau macht die RegExLogik (semantisch)?
just me
Posts: 9442
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Freies Laufwerk ermitteln

Post by just me » 04 Jan 2021, 07:29

@BoBo,

der Regex definiert eine Klasse [...] für die in der Laufwerksliste enthaltenen Buchstaben und entfernt alle Buchstaben dieser Klasse aus dem 'Laufwerksbuchstabenstring'. Was übrig bleibt, ist frei, und der letzte der Freien wird genommen SubStr(..., 0).
Filzfrosch
Posts: 64
Joined: 18 Feb 2017, 08:39
Location: Hamburg / Germany

Re: Freies Laufwerk ermitteln

Post by Filzfrosch » 04 Jan 2021, 12:04

Moin
Ihr seid der Hammer hier :thumbup:
Alle funzen gut.
Und zum Schluß der Einzeiler mit Erklärung von just me ist dann Champions League :D
Vielen Dank dafür, ich finde es immer wieder klasse zu sehen, wie Cracks die Aufgabe überhaupt angehen.
Daraus versuche ich mir dann ein wenig abzuschauen.
Aber mein Dank auch an alle anderen!
Merry Crisis and a happy new fear
BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Freies Laufwerk ermitteln

Post by BoBo » 04 Jan 2021, 16:42

@just me :thumbup:
Post Reply

Return to “Ich brauche Hilfe”