Automatisches umbenennen???

German support forum

Moderators: Hacker, Stefan2, white

User avatar
Lefteous
Power Member
Power Member
Posts: 9537
Joined: 2003-02-09, 01:18 UTC
Location: Germany
Contact:

Post by *Lefteous »

2kukulkan
Eine Verständnisfrage hätte ich noch: In welcher Form liegen denn die neuen Namen vor? Hast Du da eine Textdatei oder sind das andere vorhandene Dateinamen?
User avatar
kukulkan
Junior Member
Junior Member
Posts: 34
Joined: 2005-02-24, 09:29 UTC
Contact:

Post by *kukulkan »

...es sind andere, neue Dateien.
User avatar
Lefteous
Power Member
Power Member
Posts: 9537
Joined: 2003-02-09, 01:18 UTC
Location: Germany
Contact:

Post by *Lefteous »

2kukulkan
Wenn ich dich nun endlich verstanden habe willst Du also quasi Dateinamen kopieren, richtig?
Murphy
Member
Member
Posts: 124
Joined: 2005-02-20, 10:26 UTC

Post by *Murphy »

Hoffentlich habe ich dein Anliegen dieses Mal richtig verstanden ;-)

Die ersten drei Zeichen sind beliebig, die nächsten drei Zeichen wechseln und der Rest ist immer gleich...

Hier eine kleine Batch-Datei:

Code: Select all

CLS
@ECHO OFF
SET Tmpfile=%TEMP%\KUKULKAN.TMP
SET Target=Zielpfad (z. B. E:\Ziel\Ablage)
SET File=-063WW.12DE

DIR /B > %Tmpfile%
CD %Target%

FOR /F "delims=- tokens=2" %%n IN (%Tmpfile%) DO REN "???-%%n%File%" "000-%%n%File%"

SET Target=
SET File=
DEL %Tmpfile%
Du musst in der oberen Zeile SET Target= noch deinen Zielpfad eingeben und die Datei unter Dateiname.cmd abspeichern. Funzt leider erst ab Win2000.

Ich kenne mich mit Batch-Programmierung nicht wirklich aus (habe gerade schön per Kommandozeile FOR /? usw. gearbeitet), daher sind folgende Einschränkungen:
Quell- und Zielordner müssen auf dem selben Laufwerk liegen und die *.cmd-Datei muss im Quellordner liegen.

Das könnte man natürlich auch noch verfeinern und per Startermenü aus dem TC mit Pfadübergabe anpassen usw.

Falls es das immer noch nicht sein sollte, gebe ich mich geschlagen und ich kann dir nicht folgen ;-)

Grüße,
Murphy
User avatar
kukulkan
Junior Member
Junior Member
Posts: 34
Joined: 2005-02-24, 09:29 UTC
Contact:

Post by *kukulkan »

@Lefteus
...genau ich Dateinamen kopieren aber gleich
mehere auf einmal.
User avatar
kukulkan
Junior Member
Junior Member
Posts: 34
Joined: 2005-02-24, 09:29 UTC
Contact:

Post by *kukulkan »

In meinem wirren Kopf habe ich mir sowas vorgestellt.

Im TCMD liste ich mir beide Dateien auf
die einen im rechten Fenster die anderem im Linken Fenster.
Jetzt lässt man die beiden Verzeichnisse miteinander vergleichen.
Das Programm findet Übereinstimmungen in den Dateinamen, bis auf
die ersten 3 Zahlen. Jetzt müsste man auf Knopfdruck sagen konnen:
Übertrage die Namen aus dem rechten ins linke Fenster, oder auch umgekehrt.
User avatar
Sheepdog
Power Member
Power Member
Posts: 5150
Joined: 2003-12-18, 21:44 UTC
Location: Berlin, Germany
Contact:

Post by *Sheepdog »

Haben die Namen die gleiche Länge?

sheepdog
"A common mistake that people make when trying to design something
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams
User avatar
kukulkan
Junior Member
Junior Member
Posts: 34
Joined: 2005-02-24, 09:29 UTC
Contact:

Post by *kukulkan »

JA.
User avatar
karlchen
Power Member
Power Member
Posts: 4605
Joined: 2003-02-06, 22:23 UTC
Location: Germany

Post by *karlchen »

Hallo, Murphy.

Ich glaube, jetzt benennst du genau falsch herum um, die Quelldateinamen haben die 000 vorne, die Zeildateien irgendwelche 3-stelligen Zahlen. Guckst du vielleicht nochmal hier im allerersten Posting.

Außerdem schreibt kukulkan später, daß es keine Regel gibt, nach der umbenannt wird. Wie willst du da eine For-Schleife basteln, die den Zielnamen aus dem Quellnamen ableitet?

Oder, übersehe ich die Regel nur? (Wo doch kukulkan selbst sagt, es gibt keine?)

Karl
MX Linux 21.3 64-bit xfce, Total Commander 11.50 64-bit
The people of Alderaan keep on bravely fighting back the clone warriors sent out by the unscrupulous Sith Lord Palpatine.
The Prophet's Song
Murphy
Member
Member
Posts: 124
Joined: 2005-02-20, 10:26 UTC

Post by *Murphy »

kukulkan wrote: Im TCMD liste ich mir beide Dateien auf
die einen im rechten Fenster die anderem im Linken Fenster.
Jetzt lässt man die beiden Verzeichnisse miteinander vergleichen.
Das Programm findet Übereinstimmungen in den Dateinamen, bis auf
die ersten 3 Zahlen. Jetzt müsste man auf Knopfdruck sagen konnen:
Übertrage die Namen aus dem rechten ins linke Fenster, oder auch umgekehrt.
Jetzt hat es auch bei mir "Klick" gemacht ;-) Diesmal habe ich es auch verstanden.

Ich versuche mich nochmal, mal sehen, ob ich es hinbekomme...

2Karlchen
Hast recht, aber eigentlich bräuchte man nur die eine Zeile ändern:

Code: Select all

FOR /F "delims=- tokens=2" %%n IN (%Tmpfile%) DO REN "???-%%n%File%" "000-%%n%File%"
in

Code: Select all

FOR /F "delims=- tokens=2" %%n IN (%Tmpfile%) DO REN "000-%%n%File%" "???-%%n%File%
Rein theoretisch, habe mir da jetzt keine größeren Gedanken gemacht, weil es ja so doch noch nicht stimmt ;-)

Grüße,
Murphy
User avatar
Hacker
Moderator
Moderator
Posts: 13142
Joined: 2003-02-06, 14:56 UTC
Location: Bratislava, Slovakia

Post by *Hacker »

Angenommen die Dateien, die man umbenennen will, liegen im aktiven Panel, die "Schablonendateinamen" Dateien liegen im inaktiven Panel. Beide Ansichten sind so sortiert, dass die erste Datei im aktiven Panel den Namen von der ersten Datei im inaktiven Panel bekommen soll, die zweite von der zweiten, usw.

Ich habe zwei AutoHotKey Skripte gebastelt, die die Dateinamen vom inaktiven Panel auf die Dateien im Aktiven Panel transferrieren:

Der erste Skript tut das nur fur eine Datei. Benutzungsweise - In beiden Panelen muss der Kursor auf ".." stehen. Dann F12 drucken biss alle Dateien umbenannt sind.

Code: Select all

$F12::
If WinActive("ahk_class TTOTAL_CMD")
	Send {Tab}{Down}+{F6}^c{Esc}{Tab}{Down}+{F6}^v{Enter}
return
Der zweite Skript tut dasselbe mehrmals, also fur mehrere Dateien - man muss F12 nicht n-mal drucken (n ist ide Anzahl der umzubenennenden Dateien), sondern die Anzahl in "Loop, 2" definieren, z.B. "Loop, 28". Benutzungsweise - Die Anzahl der Dateien in Loop eintragen, Skript sichern und neu einlesen, den Kursor in beiden Panelen auf ".." stellen und F12 drucken.

Code: Select all

$F12::
SetKeyDelay, 100
If WinActive("ahk_class TTOTAL_CMD")
{
	Loop, 2
	{
		Send {Tab}{Down}+{F6}^c{Esc}{Tab}{Down}+{F6}^v{Enter}
	}
}
return
Hinweise:
Der Hotkey ist umdefinierbar auf was immer man will.
Der Kursor muss am Anfang auf ".." in beiden Panelen stehen, sonst werden die Dateien falsch umbenannt.
Es passiert nichts schlimmes wenn man in Loop eine grossere Zahl definiert (angenommen die Anazahl der Dateien im aktiven und inaktiven Panel ist dieselbe), als die Anzahl der Dateien. Es wird nur die letzte Datei mehrmals auf denselben Namen umbenannt.

HTH
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.
User avatar
kukulkan
Junior Member
Junior Member
Posts: 34
Joined: 2005-02-24, 09:29 UTC
Contact:

Post by *kukulkan »

...leider sind die Dateien nicht in der
Reihenfolge sortierbar, dass die Namen
in der Zeile jeweils zusammen passen.
Murphy
Member
Member
Posts: 124
Joined: 2005-02-20, 10:26 UTC

Post by *Murphy »

So, hier ein neues Script, dieses Mal als AutoIt3:

Code: Select all

#NoTrayIcon
#Include <string.au3>
#Include <Misc.au3>

$source = $cmdline[1]
$target = $cmdline[2]
$number = _Iif($cmdline[0] > 2, $cmdline[3], 3) 
$workingdir = @Workingdir

$search = FileFindFirstFile($source & "\*.*")  
If $search = -1 Then
 MsgBox(0, "Fehler", "Keine Dateien vorhanden im Quellpfad")
 Exit
EndIf
While 1
 $file = FileFindNextFile($search) 
 If @error Then ExitLoop
 If $file <> "." and $file <> ".." then CheckFiles($file)
WEnd
FileClose($search)
FileChangeDir($workingdir)

Func CheckFiles($file)
 $rest = StringRight($file, StringLen($file) - $number)
 $search2 = FileFindFirstFile($target & "\" & _StringRepeat("?", $number) & $rest)
 If $search2 <> -1 Then
  $file2 = FileFindNextFile($search2)
  If Not @error Then 
   FileChangeDir($target)
   RunWait(@Comspec & " /c Ren " & $file2 & " " & $file, "", @SW_HIDE)
   Exit
  EndIf
 EndIf
 FileClose($search2)
EndFunc
Bastel dir das ins Startermenü mit folgenden Parametern: "%P" "%T" {Anzahl Zeichen}

Wenn es mal mehr oder weniger Zeichen als die ersten 3 sein sollen, einfach als 3. Parameter {Anzahl Zeichen} übergeben, z. B. D:\Scripts\Rename.au3 "%P" "%T" 5

Ruft das Script auf und vergleicht alles bis auf die ersten 5 Buchstaben. Falls der Parameter {Anzahl Zeichen} weggelassen wird, wird standardmässig mit 3 Zeichen gearbeitet.

Teste das bitte Mal, ein paar Feinheiten sollten wir noch regeln können ;-)

Bei meinen Tests läuft es genau so, wie ich es mir vorgstellt habe...

Grüße,
Murphy
User avatar
Sheepdog
Power Member
Power Member
Posts: 5150
Joined: 2003-12-18, 21:44 UTC
Location: Berlin, Germany
Contact:

Post by *Sheepdog »

Na dann kann ich mir ja meine weiteren Bemühungen sparen. Ich hatte jetzt de Ansatz verfolgt, die ersten 4 zeichen zu löschen und stattdessen als erweiterung zu benennen.
also:
001.00ZUK-063WW.12DE.002-
002.00ZUK-063WW.12DE.007-
003.00ZUK-063WW.12DE.023-
004.00ZUK-063WW.12DE.017-
005.00ZUK-063WW.12DE.012-
006.00ZUK-063WW.12DE.004-

und

001.00ZUK-063WW.12DE.000-
002.00ZUK-063WW.12DE.000-
003.00ZUK-063WW.12DE.000-
004.00ZUK-063WW.12DE.000-
005.00ZUK-063WW.12DE.000-
006.00ZUK-063WW.12DE.000-

wodurch die Namen zu vergleichen wären. Aber mit dem Script geht das natürlich eleganter.

sheepdog
"A common mistake that people make when trying to design something
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams
User avatar
kukulkan
Junior Member
Junior Member
Posts: 34
Joined: 2005-02-24, 09:29 UTC
Contact:

Post by *kukulkan »

@Murphy

...das hört sich ja alles ganz vielversprechend an, aber ich versteh nur Bahnhof. Script??? AutoIt3???
Ich bin leider kein Programmierer, wäre denn so ein
Skript dann im TCMD abrufbar? :shock:
Post Reply