Total Commander Forum Index Total Commander
Forum - Public Discussion and Support
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

MUT: regex zum erstellen von Verzeichnissen aus Dateimuster?
Goto page 1, 2  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Total Commander (Deutsch) Printable version
View previous topic :: View next topic  
Author Message
versalzen
Power Member
Power Member


Joined: 16 Sep 2003
Posts: 595
Location: kölle, linksrheinisch.

PostPosted: Mon Feb 21, 2011 3:54 pm    Post subject: MUT: regex zum erstellen von Verzeichnissen aus Dateimuster? Reply with quote

Hallo,

habe jetzt einige Zeit mit experimentieren verbracht, aber mehr als verbrauchte Luft und trübe Augen ist leider nicht übriggeblieben...

Folgendes geht an die TC- und REGEX-Experten:

1) Die Frage, ob das überhaupt mit TC-Mitteln möglich ist,
und

2)
Ich habe dutzende Dateien nach folgendem Muster:
Code:
Johann_Sebastian_Bach_blafasel123.txt
Meister_Eckhard_Info123.txt
Mister_X_text123.txt


Wobei
a) alles, was sich, vor dem letzten _ (Unterscore) befindet, als Grundlage für
b) das Erstellen eines Verzeichnisses dienen soll.

Aso würden diese Verzeichnisse erstellt:
Code:
Johann_Sebastian_Bach
Meister_Eckhard
Mister_X



c) BONUS:
Die entsprechenden Dateien sollen dann in das passende Verzeichnis verschoben werden, aber das mach ich dann wohl doch händisch :-)




Mir ist es nicht gelungen:

- flexibel zu erkennen, was das letzte _ im Dateinamen ist.
- irgendwie ein Verzeichnis aus dem Ergebnis zu gestalten.

Also eigentlich nix gelungen :-/

Soweit ich nachgelesen habe, müssen Verzeichnisse schon existieren, weil das MUT keine Verzeichnisse anlegen kann. Ist das noch aktuell? Falls ja, werde ich mich gerne auf a) beschränken und direkt zu c) übergehen... :-)

Wenn die Frage 1) mit "nö" beantwortet wird, muss ich Überstunden kloppen. Find ich nicht gut :-)

Irgendjemand eine zündende Idee?
_________________
Was nützt der Löffel für die Weisheit, wenn man zu weit vom Suppentopf entfernt sitzt?

Mario
Back to top
View user's profile Send private message
Hacker
Moderator
Moderator


Joined: 06 Feb 2003
Posts: 9133
Location: Bratislava, Slovakia

PostPosted: Mon Feb 21, 2011 4:53 pm    Post subject: Reply with quote

versalzen,
Code:
(.*)_

Sollte eigenlitch funktionieren, obwohl ich keine Ahnung habe, wie man das weiter benutzen könnte.

Roman
_________________
Mal angenommen, du drückst Strg+F, wählst die FTP-Verbindung (mit gespeichertem Passwort), klickst aber nicht auf Verbinden, sondern fällst tot um.
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Dalai
Power Member
Power Member


Joined: 28 Jan 2005
Posts: 2802
Location: Meiningen (Südthüringen)

PostPosted: Mon Feb 21, 2011 5:07 pm    Post subject: Reply with quote

Bei solch komplexen Aufgaben kommt man IMO nur über ein Skript weiter. Schließlich gilt es ja, mehrere Schritte zu erledigen: Verzeichnisse anlegen und Dateien dort hinein schieben.

Mit Batch kommt man wahrscheinlich nicht weiter, daher muss man wohl zu AutoIt oder AutoHotkey greifen. Von AutoIt weiß ich sicher, dass es Regex unterstützt und natürlich auch alle nötigen Dateioperationen ausführen kann.

MfG Dalai
_________________
#101164 Personal licence
Athlon 64 X2 5400+ Black Edition, 4096 MB RAM, Gigabyte M56S-S3, WinXP SP3 & Kubuntu 8.04 x64

Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, verdient weder Freiheit noch Sicherheit.
Back to top
View user's profile Send private message Send e-mail
versalzen
Power Member
Power Member


Joined: 16 Sep 2003
Posts: 595
Location: kölle, linksrheinisch.

PostPosted: Mon Feb 21, 2011 5:56 pm    Post subject: Reply with quote

Hacker wrote:
versalzen,
Code:
(.*)_
Sollte eigenlitch funktionieren.

Ok,
Suchen nach: (.*)_
[x] RegEx
[x] Subst.
gibt mir die gewünschten Resultate.
Danke, schon mal ein Schritt(chen) weiter.

Hacker wrote:
Schließlich gilt es ja, mehrere Schritte zu erledigen
Ich bin aber gerne bereit, die einzelnen Schritte mittels TC hintereinander auszuführen. Kann man ja mittlerweile speichern, ergo auch wieder aufrufen.

Aber ich sehe auch, das es wohl an die Grenzen von TC geht.
Wat schade. AutoIt oder irgendetwas anderes jetzt zu lernen und dann auch noch erfolgreich anzuwenden klingt irgendwie nicht praktikabel.
Dann doch wohl per Hand. Die Nacht ist jung...
_________________
Was nützt der Löffel für die Weisheit, wenn man zu weit vom Suppentopf entfernt sitzt?

Mario
Back to top
View user's profile Send private message
white
Power Member
Power Member


Joined: 19 Nov 2003
Posts: 1323
Location: Netherlands

PostPosted: Mon Feb 21, 2011 6:01 pm    Post subject: Reply with quote


  1. Code:
    Suchen nach:    (.*)_.*
    Ersetzen durch: @if not exist "$1" md "$1"

    X RegEx

  2. Klicken Sie auf die Menü-Taste (unter Taste mit Fragezeichen) und klicken Sie auf "Namen bearbeiten".
  3. Speichern Sie die Datei mit dem Namen "Ordnern.cmd" in den Ordner, in dem Sie umbenennen.
  4. Editor schließen
  5. Klicken Sie auf "Abbrechen"
  6. Mehrfach-Umbenenn-Tool schließen
  7. Doppelklicken Sie auf "Ordnern.cmd"
  8. Mehrfach-Umbenenn-Tool öffnen
  9. Code:
    Suchen nach:    (.*)_.*
    Ersetzen durch: $1\\$&

    X RegEx

  10. Klicken Sie auf die Start-Taste

_________________
#16626 Personal licence
Back to top
View user's profile Send private message Send e-mail
versalzen
Power Member
Power Member


Joined: 16 Sep 2003
Posts: 595
Location: kölle, linksrheinisch.

PostPosted: Mon Feb 21, 2011 6:31 pm    Post subject: Reply with quote

Grandios, white! ;-D
dank je wel! vielen vielen Dank.

Das einzige, was ich hier unter WinXP ändern musste, war die Codierung der abgespeicherten "Ordnern.cmd",
von UCS-2 Little Endian auf ANSI, da mein Notepad++ die Datei so gespeichert hat.

Die Fehlermeldung lautete:
Code:
C:\>■@
Der Befehl "■@" ist entweder falsch geschrieben oder konnte nicht gefunden werden.


Phänomenal, allein auf die Ideen zu kommen das mit diesen gewitzten Schritten zu lösen...

Die gesparte Zeit kann ich nun mit Schlaf füllen. Auch sehr wichtig.
_________________
Was nützt der Löffel für die Weisheit, wenn man zu weit vom Suppentopf entfernt sitzt?

Mario
Back to top
View user's profile Send private message
versalzen
Power Member
Power Member


Joined: 16 Sep 2003
Posts: 595
Location: kölle, linksrheinisch.

PostPosted: Wed Feb 23, 2011 2:18 pm    Post subject: alter Hut, neuer Hut. Beide gut! Reply with quote

Hi,
nochmal ich.

Ich muss mich einfach nochmal bedanken.
Die letzen Tage komme ich einfach nicht darüber hinweg, diese Lösung als extrem genial zu empfinden und hätte ich einen Hut an, würde ich ihn ziehen.
:-)
Danke!
_________________
Was nützt der Löffel für die Weisheit, wenn man zu weit vom Suppentopf entfernt sitzt?

Mario
Back to top
View user's profile Send private message
Stefan2
Senior Member
Senior Member


Joined: 13 Sep 2007
Posts: 264
Location: Germany, EU

PostPosted: Wed Feb 23, 2011 3:26 pm    Post subject: Reply with quote

white wrote:

  1. Code:
    Suchen nach:    (.*)_.*
    Ersetzen durch: @if not exist "$1" md "$1"

    X RegEx

  2. Klicken Sie auf die Menü-Taste (unter Taste mit Fragezeichen) und klicken Sie auf "Namen bearbeiten".
  3. Speichern Sie die Datei mit dem Namen "Ordnern.cmd" in den Ordner, in dem Sie umbenennen.
  4. Editor schließen
  5. Klicken Sie auf "Abbrechen"
  6. Mehrfach-Umbenenn-Tool schließen
  7. Doppelklicken Sie auf "Ordnern.cmd"
  8. Mehrfach-Umbenenn-Tool öffnen
  9. Code:
    Suchen nach:    (.*)_.*
    Ersetzen durch: $1\\$&

    X RegEx

  10. Klicken Sie auf die Start-Taste

Genialer Tipp, danke schön!


white wrote:
Ersetzen durch: $1\\$&
Ahh! $&
Ich glaube ich hab' das mal gewusst das es das gibt... aber schon längst wieder vergessen.
Danke fürs erinnern.
Ich kenne das als $0, was hier ebenfalls funktioniert.


Ich habe gleich mal ein bisschen rumgespielt und habe mir das zusammengebastelt:

Datei; Deutsch.lng
Suchen nach: (.*)\....
Ersetzen durch: @IF NOT EXIST "$1" (MD "$1" && move "$0" "$1") ELSE (move "$0" "$1")
X RegEx

Damit funktioniert das MD und MOVE in einem Arbeitsschritt.
z.B.
@IF NOT EXIST "Deutsch" (MD "Deutsch" && move "Deutsch.lng" "Deutsch") ELSE (move "Deutsch.lng" "Deutsch")

Nur mal so Wink



---
EDIT

mehr Tests:


Code:

Alles was mit x aufhört
Datei ausgewählt: Deutsch.lng

Suchen nach: (.*)\....
Ersetzen durch: @IF NOT EXIST "$1" (MD "$1" && move "*$0" "$1") ELSE (move "*$0" "$1")
[X] RegEx

@IF NOT EXIST "Deutsch" (MD "Deutsch" && move "*Deutsch.lng" "Deutsch") ELSE (move "*Deutsch.lng" "Deutsch")

Passt auf:
Deutsch.lng
Kopie von Deutsch.lng
Neue-Deutsch.lng

Code:

Alles was ein X im Namen hat
Datei ausgewählt: Chinese_s.lng

Suchen nach: (.*)\.(...)
Ersetzen durch: @IF NOT EXIST "$1" (MD "$1" && move "*$1*.$2" "$1") ELSE (move "*$1*.$2" "$1")
[X] RegEx

@IF NOT EXIST "Chinese" (MD "Chinese" && move "*Chinese*.lng" "Chinese") ELSE (move "*Chinese*.lng" "Chinese")

Passt auf:
Chinese_s.lng
Chinese_t.lng

Code:

Alle mit selben Namen und beliebiger Endung
Datei ausgewählt: Deutsch.lng

Suchen nach: (.*)\....
Ersetzen durch: @IF NOT EXIST "$1" (MD "$1" && move "$1.*" "$1") ELSE (move "$1.*" "$1")
[X] RegEx

@IF NOT EXIST "Deutsch" (MD "Deutsch" && move "Deutsch.*" "Deutsch") ELSE (move "Deutsch.*" "Deutsch")

Passt auf:
Deutsch.lng
Deutsch.mnu
Deutsch.ini

Code:

Alle mit der selben Endung
Datei ausgewählt: Vorlage.lng

Suchen nach: (.*)\.(...)
Ersetzen durch: @IF NOT EXIST "$1" (MD "$1" && move "*.$2" "$1") ELSE (move "*.$2" "$1")
[X] RegEx

@IF NOT EXIST "Vorlage" (MD "Vorlage" && move "*.lng" "Vorlage") ELSE (move "*.lng" "Vorlage")

Passt auf:
Vorlage.lng
Deutsch.lng
French.lng
Romanian.lng



Fun!


-------EDIT
Hatte gerade ein neues Problem.
Dutzend Ordner mit Dateien die alle in einen Ordner zusammen kopiert werden sollen.
Code:

Gegeben sind diese Ordner:
xyz123\abc.txt
xyz456\def.log
xyz789\ghk.exe

Neuen Ordner anlegen mit z.B. Namen  "SammelOrdner"

Alle xyz-Ordner markieren und das MUT aufrufen.

Die von white gezeigten Schritte ausführen:

Suchen nach: (.*)
Ersetzen durch:COPY $1\\*.* SammelOrdner
[X] RegEx


Ergibt folgende Batch:
COPY xyz123\*.* SammelOrdner
COPY xyz456\*.* SammelOrdner
COPY xyz789\*.* SammelOrdner

Diese ausführen und alle Dateien aus den xyz-Ordnern werden in den SammelOrdner kopiert.

_________________
Greetings, Stefan.


Last edited by Stefan2 on Sun Feb 27, 2011 9:32 am; edited 2 times in total
Back to top
View user's profile Send private message
white
Power Member
Power Member


Joined: 19 Nov 2003
Posts: 1323
Location: Netherlands

PostPosted: Wed Feb 23, 2011 3:55 pm    Post subject: Reply with quote

versalzen wrote:
Grandios, white! ;-D
dank je wel! vielen vielen Dank.

Graag gedaan. Bitte. Smile
_________________
#16626 Personal licence
Back to top
View user's profile Send private message Send e-mail
truecolor
Junior Member
Junior Member


Joined: 18 Feb 2010
Posts: 28

PostPosted: Tue Mar 08, 2011 2:14 am    Post subject: Touché Reply with quote

"Impossibile",

da glaubt man doch tatsächlich ein Problemchen zu haben,

- beginnt mit "DIR *.pdf >Liste.txt" eine Verzeichnisliste für hunderten von PDF-Dateien zu erstellen,
- die (anschließend mit Word bereinigt)
- in Excel eingelesen wird
- um daraus den späteren Verz.-Namen zu extrahieren und - vor jeder Zeile ein MD zu setzen
- als vz.bat aus Excel zu exportieren,
- um die Leerverz. zu erstellen
- damit später "von Hand" die Dateien in die Verz. verschoben werden können ...

da stöbert man hier im Forum ein wenig herum ... und ... ich findet sogar hierfür eine fertige Lösung.

Da musste ich erst mal kräftig über meine eigene Einfältigkeit lachen, gefolgt von riesen-Respekt vor diesem genialen Programm TC mit noch größerem Respekt vor dessen PowerUsern.


Ihr habt mir sehr viel Arbeit, noch mehr Zeit und bestimmt jede Menge Nerven gespart.

Viiiiiiiiielen Dank.
_________________
"... plötzlich ein greller Blitz am Himmel, ein flammender Meteor stürzt zur Erde..."
Back to top
View user's profile Send private message
truecolor
Junior Member
Junior Member


Joined: 18 Feb 2010
Posts: 28

PostPosted: Tue Mar 08, 2011 2:21 am    Post subject: Reply with quote

Stefan2 wrote:

-------EDIT
Hatte gerade ein neues Problem.
Dutzend Ordner mit Dateien die alle in einen Ordner zusammen kopiert werden sollen.
Code:

Gegeben sind diese Ordner:
xyz123\abc.txt
xyz456\def.log
xyz789\ghk.exe

Neuen Ordner anlegen mit z.B. Namen  "SammelOrdner"

Alle xyz-Ordner markieren und das MUT aufrufen.

Die von white gezeigten Schritte ausführen:

Suchen nach: (.*)
Ersetzen durch:COPY $1\\*.* SammelOrdner
[X] RegEx


Ergibt folgende Batch:
COPY xyz123\*.* SammelOrdner
COPY xyz456\*.* SammelOrdner
COPY xyz789\*.* SammelOrdner

Diese ausführen und alle Dateien aus den xyz-Ordnern werden in den SammelOrdner kopiert.


Sorry, aber DAS verstehe ich jetzt nicht ganz...

habe ich drei Verz.
- markiere ich alle drei,
- Alt+F7(suchen nach) *.*
- "awenden"-Button (hab ich hier gelernt Wink )
- alle gefundenen Dateien markieren
- F5 -> kopieren
- fertisch

Wozu hierfür so ein Aufwand mit RegEx betreiben?

... oder hab ich da was falsch gelesen?
_________________
"... plötzlich ein greller Blitz am Himmel, ein flammender Meteor stürzt zur Erde..."
Back to top
View user's profile Send private message
Stefan2
Senior Member
Senior Member


Joined: 13 Sep 2007
Posts: 264
Location: Germany, EU

PostPosted: Tue Mar 08, 2011 3:10 am    Post subject: Reply with quote

truecolor wrote:
Wozu hierfür so ein Aufwand mit RegEx betreiben?

... oder hab ich da was falsch gelesen?
Nein, nichts falsch verstanden.
Es ist nur wie mit den Wegen und Rom...

Wobei "dein" Weg für diesen Einsatzzweck bei weitem der elegantere ist.
_________________
Greetings, Stefan.
Back to top
View user's profile Send private message
versalzen
Power Member
Power Member


Joined: 16 Sep 2003
Posts: 595
Location: kölle, linksrheinisch.

PostPosted: Thu Jul 05, 2012 6:02 pm    Post subject: Bei mir gehts nicht mehr...urplötzlich... Reply with quote

white wrote:

  1. Code:
    Suchen nach:    (.*)_.*
    Ersetzen durch: @if not exist "$1" md "$1"

    X RegEx

  2. Klicken Sie auf die Menü-Taste (unter Taste mit Fragezeichen) und klicken Sie auf "Namen bearbeiten".
  3. Speichern Sie die Datei mit dem Namen "Ordnern.cmd" in den Ordner, in dem Sie umbenennen.
  4. Editor schließen
  5. Klicken Sie auf "Abbrechen"
  6. Mehrfach-Umbenenn-Tool schließen
  7. Doppelklicken Sie auf "Ordnern.cmd"
  8. Mehrfach-Umbenenn-Tool öffnen
  9. Code:
    Suchen nach:    (.*)_.*
    Ersetzen durch: $1\\$&

    X RegEx

  10. Klicken Sie auf die Start-Taste


Hallo,
kann es sein, das mit TC 8.x die Schritte 8-10 aus dem oberen Thread und das daraus resultierende Verschieben der markierten Dateien in die existierenden Ordner nicht mehr -wie vor TC 8.x- funktioniert?
Irgendwie passiert nix mehr...
Dabei habe ich mich damals so gefreut, das es so bequem funktioniert.

Hier noch meine vor Monaten gespeicherten MUT-Vorlagen:
Code:
[rename]
Verz. aus Dateimuster -> verschiebe ins erstellte Verz._name=[N]
Verz. aus Dateimuster -> verschiebe ins erstellte Verz._ext=[E]
Verz. aus Dateimuster -> verschiebe ins erstellte Verz._search=(.*)_.*
Verz. aus Dateimuster -> verschiebe ins erstellte Verz._replace=$1\\$&
Verz. aus Dateimuster -> verschiebe ins erstellte Verz._params=0|1|1|1|1|0|0
Verz. aus Dateimuster -> Vorlage zum Speichern der .CMD_name=[N]
Verz. aus Dateimuster -> Vorlage zum Speichern der .CMD_ext=[E]
Verz. aus Dateimuster -> Vorlage zum Speichern der .CMD_search=(.*)_.*
Verz. aus Dateimuster -> Vorlage zum Speichern der .CMD_replace=@if not exist "$1" MD "$1"
Verz. aus Dateimuster -> Vorlage zum Speichern der .CMD_params=0|1|1|1|1|0|0

_________________
Was nützt der Löffel für die Weisheit, wenn man zu weit vom Suppentopf entfernt sitzt?

Mario
Back to top
View user's profile Send private message
matbal
Member
Member


Joined: 28 Nov 2004
Posts: 149

PostPosted: Fri Jul 06, 2012 1:14 am    Post subject: Reply with quote

Mittlerweile sollte das in einem Rutsch gehen, da beim Umbenennen auch Ordner erstellt werden können. Ich habe jetzt aber nicht alles durchprobiert, nur ein Beispiel:

Suchen:
Code:
(.*)_(.*)

Ersetzen
Code:
$1\\$1_$2

Anhaken
[x] RegEX
[x] Subst.

Das entspricht der 3. + 8. Vorlage von Dir.
_________________
http://matbal.drivehq.com
Back to top
View user's profile Send private message
white
Power Member
Power Member


Joined: 19 Nov 2003
Posts: 1323
Location: Netherlands

PostPosted: Fri Jul 06, 2012 4:25 am    Post subject: Re: Bei mir gehts nicht mehr...urplötzlich... Reply with quote

versalzen wrote:
kann es sein, das mit TC 8.x die Schritte 8-10 aus dem oberen Thread und das daraus resultierende Verschieben der markierten Dateien in die existierenden Ordner nicht mehr -wie vor TC 8.x- funktioniert?

Nein, es sollte funktionieren. Es funktioniert hier gut. Nur mit TC 8.x brauchen Sie die Schritte 1-7 niet mehr.
_________________
#16626 Personal licence
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Total Commander (Deutsch) All times are GMT - 6 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Impressum: This site is maintained by Ghisler Software GmbH

Using phpBB © 2001-2005 phpBB Group