Quelle beim Umbenennen erhalten?

German support forum

Moderators: Hacker, Stefan2, white

Post Reply
alfware17
Junior Member
Junior Member
Posts: 79
Joined: 2009-04-17, 21:13 UTC

Quelle beim Umbenennen erhalten?

Post by *alfware17 »

Ich benenne oft meine Dateien in der Form datei.ext um in datei_djjjjmmtt_thhmmss.ext um
mit dem Mehrfach-Umbenennen des Totalcommander oder manchmal per Hand kopieren/verschieben.
Genau da liegt der Hase im Pfeffer - meine Original-Datei ist dann weg und ich muß gucken, welche
war es und erneut kopieren.
Ich habe schon an ein Batch-Script gedacht - weiß aber wenn ich mich daran versuche, werde ich wieder
gleich gierig und möchte eine/alle/markierte Dateien... Somit wäre es mir deutlich lieber, wenn es ein
Häkchen beim Mehrfach-Umbenennen gäbe "Quelle erhalten". Aber das ist nun wohl zuviel der guten
Wünsche auf einmal...
Und ja den Workaround - neues Verzeichnis, dort alle zu archivierenden Kandidaten hin, dort umbenennen und wieder
zurück - habe ich schon probiert. Wenn ich nicht so faul wäre und paranoid beim Kopieren (dann synchroniere ich
gleich noch), würde ich das auch immer so machen
User avatar
Dalai
Power Member
Power Member
Posts: 9943
Joined: 2005-01-28, 22:17 UTC
Location: Meiningen (Südthüringen)

Re: Quelle beim Umbenennen erhalten?

Post by *Dalai »

Wenn eine Datei einen neuen Namen bekommt, ist der alte Name nicht mehr da - genau das ist der Sinn der Sache. Das MUT kopiert nicht sondern es benennt um bzw. verschiebt, wenn man in der Umbenennmaske einen neuen (relativen) Pfad angibt. Was soll denn "Quelle erhalten" tun bzw. sein?
#101164 Personal licence
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64

Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
User avatar
Stefan2
Power Member
Power Member
Posts: 4281
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Re: Quelle beim Umbenennen erhalten?

Post by *Stefan2 »

alfware17 wrote: 2025-03-30, 12:11 UTC Quelle beim Umbenennen erhalten?
....
1. Datei(en) auswählen
2. Strg + C/V drücken
3. Die Kopie(en) umbenennen



 
alfware17
Junior Member
Junior Member
Posts: 79
Joined: 2009-04-17, 21:13 UTC

Re: Quelle beim Umbenennen erhalten?

Post by *alfware17 »

Stefan2 wrote: 2025-03-30, 13:16 UTC
alfware17 wrote: 2025-03-30, 12:11 UTC Quelle beim Umbenennen erhalten?
....
1. Datei(en) auswählen
2. Strg + C/V drücken
3. Die Kopie(en) umbenennen



 
Naja, das wäre eine Kurzvariante meines Umweges über ein anderes Verzeichnis. Und man muß beim Mehrfachumbenenn-Tool das -Kopie killen, aber gangbar, Danke
alfware17
Junior Member
Junior Member
Posts: 79
Joined: 2009-04-17, 21:13 UTC

Re: Quelle beim Umbenennen erhalten?

Post by *alfware17 »

Dalai wrote: 2025-03-30, 12:32 UTC Wenn eine Datei einen neuen Namen bekommt, ist der alte Name nicht mehr da - genau das ist der Sinn der Sache. Das MUT kopiert nicht sondern es benennt um bzw. verschiebt, wenn man in der Umbenennmaske einen neuen (relativen) Pfad angibt. Was soll denn "Quelle erhalten" tun bzw. sein?
nunja, es sollte nebenbei kopieren :-)
User avatar
Dalai
Power Member
Power Member
Posts: 9943
Joined: 2005-01-28, 22:17 UTC
Location: Meiningen (Südthüringen)

Re: Quelle beim Umbenennen erhalten?

Post by *Dalai »

Wie ich schon sagte: das ist nicht der Sinn des MUT. Wenn du Kopien der Dateien brauchst, dann zieh eine Kopie. Alternativ genügen dir vielleicht die Dateinamen, die per Menüpunkt Markieren > "Auswahl in Datei speichern" abgelegt werden können. Oder man erstellt Links (Symlink oder Hardlink) in einem anderen oder demselben Verzeichnis. Es gibt vielerlei Wege, die man bei Bedarf durch Automatisierung verkürzen bzw. vereinfachen kann.
#101164 Personal licence
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64

Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
User avatar
white
Power Member
Power Member
Posts: 5743
Joined: 2003-11-19, 08:16 UTC
Location: Netherlands

Re: Quelle beim Umbenennen erhalten?

Post by *white »

Moderator message from: white » 2025-03-31, 12:43 UTC

Fixed quotation by enabling BBCodes in the following posts:
alfware17 wrote: 2025-03-31, 12:05 UTC
alfware17 wrote: 2025-03-31, 12:07 UTC
alfware17
Junior Member
Junior Member
Posts: 79
Joined: 2009-04-17, 21:13 UTC

Re: Quelle beim Umbenennen erhalten?

Post by *alfware17 »

Danke erstmal für eure Antworten. Ich habe mir jetzt ein kleines Script geschrieben - ist noch nicht ganz fertig, sonst würde ich es hier vorstellen -
was genau das macht was ich will, meinen Timestamp setzen und kopieren.
Ich knoble noch ein bißchen an der Umsetzung von 1 Datei auf mehrere Dateien, bisher geht es nur für alle im Verzeichnis. Ich würde es aber gerne
für ALLE MARKIERTEN machen. Daher wieder meine Frage an die Experten hier - woher weiß TotalCommander, welche Einträge gerade rot markiert sind und kann ich mich da ggf reinhängen, sprich mein Script genau für diese Einträge ausführen lassen? Idealerweise noch auf eine Tastenkombination, aber ok einmal eingeben kann ich den Scriptnamen auch schon
User avatar
Dalai
Power Member
Power Member
Posts: 9943
Joined: 2005-01-28, 22:17 UTC
Location: Meiningen (Südthüringen)

Re: Quelle beim Umbenennen erhalten?

Post by *Dalai »

Ich empfehle einen Blick in die TC-Hilfe im Index "Buttonbar ändern". Dort sind alle Parameter wie %L, %WL, %UL, %S usw. erklärt, die man üblicherweise für Skripte braucht.
#101164 Personal licence
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64

Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
User avatar
ZoSTeR
Power Member
Power Member
Posts: 1049
Joined: 2004-07-29, 11:00 UTC

Re: Quelle beim Umbenennen erhalten?

Post by *ZoSTeR »

@alfware17

Welche Scriptsprache nimmts Du denn?
Für PowerShell und Batch hab ich Templates rumliegen bzw man findet auch schnell im Forum was.
alfware17
Junior Member
Junior Member
Posts: 79
Joined: 2009-04-17, 21:13 UTC

Re: Quelle beim Umbenennen erhalten?

Post by *alfware17 »

Ich habe das nun geschafft :D
Hier ist mein Script:

Code: Select all

@echo off
setlocal enabledelayedexpansion

:: Datei-Liste aus Total Commander einlesen
for /f "delims=" %%F in (%1) do (
    set "filepath=%%~fF"         :: vollständiger Pfad der Datei
    set "filename=%%~nF"         :: Dateiname ohne Erweiterung
    set "extension=%%~xF"        :: Dateierweiterung

    :: Pfad für WMIC vorbereiten (Backslashes verdoppeln für wmic)
    set "filepath=!filepath:\=\\!" 

    :: Änderungsdatum abrufen
    for /f "tokens=2 delims==" %%A in ('wmic datafile where name^="!filepath!" get LastModified /value') do (
        set "timestamp=%%A"
    )

    :: Prüfen, ob der Timestamp gefüllt wurde
    if not defined timestamp (
        echo Fehler: Kein Zeitstempel für %%F gefunden!
        pause
        exit /b
    )

    :: Timestamp ins richtige Format bringen (_dYYYYMMDD_tHHMMSS)
    set "timestamp=_d!timestamp:~0,8!_t!timestamp:~8,6!"

    :: Datei mit neuem Namen kopieren
    copy "!filepath!" "%%~dpF!filename!!timestamp!!extension!" > nul
)
Ich habe es als neuen Button eingebunden, als .BAT in meinem Pfad und "als Symbol". Ein Icon zu finden war nicht einfach aber lag wohl an meinen Tomaten auf den Augen.

Als Parameter habe ich %L gewählt. Es geht für die aktuelle Datei oder für eine Auswahl also wie gewünscht. Getestet habe ich unter Win10, 7 und XP - wow!

Kleine Verzweiflung gab es beim Änderungszeitpunkt (Datum/Zeit) und wenn mich ChatGPT noch so sehr verwirrt, nun habe ich es endlich mit dem wmic hinbekommen. War schon kurz davor ein Anwendungsprogramm (Pascal) zu schreiben. Lese ich doch, unter Win11 gibts kein wmic mehr??? Keiner meiner PC hat je "Powershell" gehabt oder doch?

Wenn ich wüßte, wie man die %L Liste in Pascal oder Python oder Java ausliest, könnte ich das Programm doch noch schreiben.

OK, graue Haare sind mir gewachsen (!) bei der ersten for-Schleife, da in %1 nur temporäre Dateien unter c:\users...\appdata\temp drin standen und die mir natürlich weder Pfad noch Änderungsdatum geben.
Echte Verzweiflung. Zumal mir ChatGPT unschuldsbewußt erst %P%S oder %F angeboten hatte mit der obigen Schleife mit /f.
Auf meinen Einwand hin, daß da aber nur 1 Datei drin steht auch wenn mehrere markiert sind, dann %L aber aus irgendwelchen Gründen die Schleife ohne /f. Debuggen in Scripten ist schööööööön.

P.S. Habe gerade getestet, %P%S oder %S wirkt leider nur auf 1 Datei.
alfware17
Junior Member
Junior Member
Posts: 79
Joined: 2009-04-17, 21:13 UTC

Re: Quelle beim Umbenennen erhalten?

Post by *alfware17 »

Es hat mir dann mal keine Ruhe gelassen und ich wollte das "böse" Script ablösen.
Daher hier meine Variante als (Pascal) Programm. Vorteil (für mich): ich habe verstanden, was da übergeben wird
und schlagartig eine klitzekleine Idee mehr vom Totalcommander (der wohl auch in Lazarus programmiert wird?)
Nachteil: man muß es compilieren und die EXE ist weit größer als das Script. Dafür aber auch (gefühlt) schneller,
ab ein paar Hundert Dateien jedenfalls.

Code: Select all

program kopiere;

{$mode objfpc}

uses
  Windows, SysUtils;

var
  ListFile: TextFile;
  FileName, NewFileName, NamePart, ExtPart: string;
  FileTime: TDateTime;
  SearchRec: TSearchRec;
begin
  if ParamCount < 1 then begin
    Writeln('Fehler: Keine Parameterliste übergeben.');
    Halt(1);
  end;
  AssignFile(ListFile, ParamStr(1));
  {$I-} Reset(ListFile); {$I+}
  if IOResult <> 0 then begin
    Writeln('Fehler: Kann Datei nicht öffnen: ', ParamStr(1));
    Halt(1);
  end;
  while not EOF(ListFile) do begin
    ReadLn(ListFile, FileName);
    if FindFirst(FileName, faAnyFile, SearchRec) = 0 then begin
      FileTime := FileDateToDateTime(SearchRec.Time);
      NamePart := ChangeFileExt(FileName, '');
      ExtPart := ExtractFileExt(FileName);
      NewFileName := NamePart + '_d' + FormatDateTime('YYYYMMDD', FileTime) + '_t' + FormatDateTime('HHMMSS', FileTime) + ExtPart;
      if CopyFile(PChar(AnsiString(FileName)), PChar(AnsiString(NewFileName)), False) 
         then Writeln('Kopiert: ', NewFileName)
         else Writeln('Fehler beim Kopieren: ', FileName);
      FindClose(SearchRec);
    end
    else Writeln(FileName, ' (Fehler: Datei nicht gefunden)');
  end;
  CloseFile(ListFile);
  //Readln;
end.
Post Reply