Hallo. muss aus Dateinamen Ordner erstellen, hab da keine Idee wie ich das angehen soll
vielleicht kann man mir da weiterhelfen.
Gruß
Hallo. muss aus Dateinamen Ordner erstellen, hab da keine Idee wie ich das angehen soll
vielleicht kann man mir da weiterhelfen.
Gruß
Nun, ebenso kurz wie die Frage: mit DirCreate.
Wenn Du mehr Informationen lieferst, kann man auch mehr Hilfe anbieten.
- Welche Dateinamen?
- Mit/ohne Dateiendung?
- Wo sollen die Ordner erstellt werden?
- Als Unterordner von welchem Ordner?
- Dynamisch oder nur einmalig?
Die Ordner sollen im gleichen Verzeichnis (wo Datei ist) erstellt werden und ohne Dateiendung
dann sollte die Datei in den gleich namigen Ordner kopiert werden.
Hab da ein paar hundert Dateien mit denen es so gemacht werden soll.
Gruß
Also 1 Ordner je Datei, wobei der Ordnername dem Dateinamen entspricht (ohne Endung). Richtig?
(Nein, ich werde den Sinn dahinter jetzt erst mal nicht hinterfragen)
Ja genau so
Liegen alle diese Dateien, in ein und demselben Ordner?
So habe ich es verstanden, daher hier eine quick and dirty Lösung:
Opt('MustDeclareVars', 1)
#include <MsgBoxConstants.au3>
CreateStructure()
Func CreateStructure()
Local $sFileName = "", $iResult = 0, $target
Local Const $hSearch = FileFindFirstFile("*.*")
If $hSearch = -1 Then
MsgBox($MB_SYSTEMMODAL, "", "Error: No files/directories matched the search pattern.")
Return False
EndIf
While 1
$sFileName = FileFindNextFile($hSearch)
If @error Then ExitLoop
If ($sFileName <> @ScriptName) then
$target = @ScriptDir & '/' & StringLeft($sFileName, StringinStr($sFileName, '.') - 1) & '/'
If not FileExists($target) then DirCreate($target)
FileMove(@ScriptDir & '/' & $sFileName, $target & $sFileName)
EndIf
WEnd
FileClose($hSearch)
EndFunc
Alles anzeigen
Edit: Jetzt mit flexibler Dateiendung und nicht mehr ganz so QuD
ja liegen alle in dem gleichen Ordner
Moombas aufpassen: Dateiendungen müssen nicht 3 Zeichen lang sein (z.b. 7z, jpeg etc.).
Daher lieber die Position des letzten Punktes im Dateinamen mit StringInStr() ermitteln und diese als Größenangabe beim splitten verwenden.
Wie gesagt QuD
Hab es mal angepasst
Bleibt noch die Möglichkeit, wenn Punkte im Dateinamen verwendet wurden (z.B. test.txt.old)
Das habe ich dann hier mal mit berücksichtigt:
Opt('MustDeclareVars', 1)
#include <MsgBoxConstants.au3>
CreateStructure()
Func CreateStructure()
Local $sFileName = "", $iResult = 0, $target
Local Const $hSearch = FileFindFirstFile("*.*")
If $hSearch = -1 Then
MsgBox($MB_SYSTEMMODAL, "", "Error: No files/directories matched the search pattern.")
Return False
EndIf
While 1
$sFileName = FileFindNextFile($hSearch)
If @error Then ExitLoop
If ($sFileName <> @ScriptName) then
$target = @ScriptDir & '\' & StringLeft($sFileName, StringinStr($sFileName, '.', Default, -1) - 1) & '\'
If not FileExists($target) then DirCreate($target)
FileMove(@ScriptDir & '\' & $sFileName, $target & $sFileName)
EndIf
WEnd
FileClose($hSearch)
EndFunc
Alles anzeigen
Edit: Corrected the slashes into correct direction.
Bleibt noch die Möglichkeit, wenn Punkte im Dateinamen verwendet wurden (z.B. test.txt.old)
Deshalb schrieb ich ja: "den letzten Punkt". Mit StringInStr() machbar indem man den occurance-Parameter auf -1 setzt.
StringSplit braucht man hierfür nicht und kann es in einem Einzeiler erledigen.
Hast du recht an den Parameter occurance hatte ich nicht gedacht XD, habs korrigiert.
Brauche das aber auch zu selten
Danke Euch perfekt, ihr habt mir eine menge Arbeit erspart.
Das letzte Script funktioniert einwandfrei, vor dem letzten Edit verhalten sich die erstellten Ordner sehr komisch
die werden im Explorer angezeigt kann die aber nicht löschen od. in ein anderes Verzeichnis kopieren.
Windows meldet da: Element wurde nicht gefunden
Aber nochmals vielen Dank
Ganz rund läuft es doch noch nicht, bekomme immer wieder die Fehlermeldung
"Element wurde nicht gefunden" kann diese Ordner dann auch nicht mehr löschen, obwohl sie angezeigt werden
Bitte das Script posten, bei dem diese Fehlermeldung auftritt!
Ist weiter oben #12
Moombas :
Ein weiterer Sonderfall wäre, dass ein Dateiname keine Extension besitzt. Dann kann kein gleichnamiges Unterverzeichnis angelegt werden.
Nur eine kleine Alternative zu :
$target = @ScriptDir & '/' & StringLeft($sFileName, StringinStr($sFileName, '.', Default, -1) - 1) & '/'
Hier kann z.B. auch ein regulärer Ausdruck verwendet werden :
$target = @ScriptDir & '\' & StringRegExpReplace($sFileName, '(.*)\..*', "$1") & '\'
"Element wurde nicht gefunden"
Bau eine Überprüfung ein, ob der erstellte Ordner existiert (ggf. in Schleife bis er existiert) und verschiebe die Datei erst dann.