Code: Alles auswählen
EnableExplicit
Procedure CreatePath(path.s)
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Windows
#Directory_Separator$="\"
CompilerDefault
#Directory_Separator$="/"
CompilerEndSelect
path+#Directory_Separator$
While CountString(path, #Directory_Separator$+#Directory_Separator$)
path=ReplaceString(path, #Directory_Separator$+#Directory_Separator$, #Directory_Separator$)
Wend
Protected this.s=GetCurrentDirectory(), exist=1, n, new.s=this, temp.s
While SetCurrentDirectory(StringField(path, exist, #Directory_Separator$))
exist+1
Wend
For n=exist To CountString(path, #Directory_Separator$)
temp=StringField(path, n, #Directory_Separator$)
If Not (CreateDirectory(temp) And SetCurrentDirectory(temp))
DeleteDirectory(new, "", #PB_FileSystem_Recursive)
SetCurrentDirectory(this)
ProcedureReturn 0
EndIf
new+#Directory_Separator$+temp
Next
SetCurrentDirectory(this)
ProcedureReturn 1
EndProcedure
Debug CreatePath("C:\Test\PrograMMe\\pure basic")
Arbeitsweise:
Zunächst hänge ich ein OS-spezifisches Backslash an und fange dann alle doppelten (Back)Slashes ab

Dann speichere ich den aktuellen Pfad von GetCurrentDirectory() in einer Variablen um ihn am Ende wiederherzustellen.
Danach wechsle ich so weit in den Pfad hinein, wie es nur geht, mittels SetCurrentDirectory(). Das ist das selbe, als würde ich in einer Eingabeaufforderung folgendes eingeben:
Code: Alles auswählen
> C:
> cd "programme"
> cd "pureBasic"
Kann ich nicht tiefer in den Pfad wechseln weiß ich: "Aha, das Verzeichnis gibt's noch nicht, ich muss es erstellen. Von da an wechsle ich immer 2 Befehle ab: CreateDirectory() zum Erstellen des Verzeichnisses und SetCurrentDirectory(), um in das soeben erstelle Verzeichnis zu wechseln.
Laufwerk C: gibt's ja schon, dann würde es in der Eingabeauffoerdung so aussehen:
Code: Alles auswählen
> C:
> mdir "Programme"
> cd "Programme"
> mdir "PureBasic"
> cd "pureBasic"
Sollte die Prozedur fehlschlagen, werden alle bis dahin erstellen Ordner gelöscht.
Verbesserungen erwünscht!

// Edit: Ich habe nicht extra groß geschrieben, das ist ein Forumsbug, offensichtlich wenn man > innerhalb der [ code ] Tags benutzt...

ja, ist ein forenbug - workaround eingefügt - mach nen zeilenumbruch am ende des code/quote blocks - Kaeru fecit