Der Zweck von Chr(Int(Rnd(1) * 26) + 97)
ist, ein zufälliges Zeichen im Bereich "a" bis "z" auszuwählen. Es funktioniert, weil der ASCII-Code für "a" 97 ist und der Rest des Alphabets der Reihe nach folgt. Somit baut die for-Schleife eine zufällige String für Kleinbuchstaben, deren Länge sich irgendwo zwischen 1 und 20.
typext = "execombatbmpjpggifdocxlsppthtmhtthta"
ist eine Kette von 33 = 3x11 Zeichen. Aufeinander folgende Tripel sind gemeinsame Dateierweiterungen, "exe", "com", "Fledermaus", etc. Der Ausdruck
Mid(typext, ((tmpext - 1) * 3) + 1, 3)
Extrakte einer dieser Tripel.
Es gibt viele Probleme mit diesem Code.
1) Randomize (Timer)
das erste Mal ist unnötig ausführlich. Randomize
selbst sät den Zufallszahlengenerator mit der Systemzeit - Sie müssen nichts weiterleiten, es sei denn, Sie möchten in Zukunft den Strom von Zufallszahlen reproduzieren können, was hier nicht der Fall ist.
2) Randomize (Timer)
das zweite und dritte Mal ist wirklich sinnlos. Da Timer
eine Auflösung von 1 Millisekunde hat, ist es bei einer erneuten Verwendung dieser Zeile wahrscheinlich, dass der Zufallszahlengenerator genau auf den gleichen Seed zurückgesetzt wird. Daher könnten die Wiederholungen dieser Zeile die Menge der Zufälligkeit in der Ausgabe verringern.
3) In Rnd(1)
ist die 1
sinnlos. Es hat genau die gleiche Ausgabe wie Rnd
4) Warum hardwire in 11 bestimmten Dateierweiterungen und warum beschränken Sie sich auf Dateiendungen der Länge 3? Es macht mehr Sinn, ein Array von Dateierweiterungen zu haben und dann ein zufälliges Element des Arrays auszuwählen. Etwas wie:
typext = Array("exe","com","bat","bmp","jpg", "gif", "doc", "xls","ppt", "htm", "htt", "hta")
r = Int(Rnd * (1+ UBound(typext)))
tmpname=tmpname & "." & typext(r) & ".vbs"
Auf diese Weise können Sie frei andere Einträge in das Array hinzufügen, einschließlich solcher Dinge wie „c“ und der Rest des Codes arbeiten.
Hier ist eine aufgeräumte Version als Funktion geschrieben:
Function RandFileName()
Dim tmpname, namel, lettre, tmpext, typext, r
Randomize
tmpname = ""
namel = Int(Rnd(1) * 20) + 1
For lettre = 1 To namel
tmpname = tmpname & Chr(Int(Rnd(1) * 26) + 97)
Next
typext = Array("exe", "com", "bat", "bmp", "jpg", "gif", "doc", "xls", "ppt", "htm", "htt", "hta")
r = Int(Rnd * (1 + UBound(typext)))
tmpname = tmpname & "." & typext(r) & ".vbs"
RandFileName = tmpname
End Function
typische Ausgabe: bgwkxjvaapr.exe.vbs
Mid (typext, ((TmpExt - 1) * 3) + 1, 3) Was genau ist über Zahlen, die die Extraktion dieser Erweiterung durchführen? Wie wird eine solche Multiplikation und Addition zu einem solchen Ergebnis führen? – Akki
Das mittlere Argument '((tmpext - 1) * 3) + 1' ergibt eine der Zahlen 1,4,7, ..., 31 (abhängig vom Zufallswert' tmpext'). Wenn 'tmpext' zum Beispiel 2 ist, dann wird dies zu 7 ausgewertet und dann würde 'Mid (typext, 7,3)' die 3 Zeichen extrahieren, die an Position 7 beginnen. Das wäre der Teilstring" bat ". Wie ich in meiner Antwort angedeutet habe, glaube ich wirklich nicht, dass dies ein guter Weg ist, dies zu tun. Ich erwähnte, dass ich es zu unflexibel fand. Es ist auch unnötig unklar. –
Wegen der Subtraktion um 1, in dem obigen Kommentar hätte ich sagen sollen, dass, wenn 'tmpext' * 3 * ist, der Ausdruck zu 7 ... –