Quelle beim Umbenennen erhalten?
Moderators: Hacker, Stefan2, white
Quelle beim Umbenennen erhalten?
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
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
Re: Quelle beim Umbenennen erhalten?
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
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64
Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
Re: Quelle beim Umbenennen erhalten?
1. Datei(en) auswählen
2. Strg + C/V drücken
3. Die Kopie(en) umbenennen
Re: Quelle beim Umbenennen erhalten?
Naja, das wäre eine Kurzvariante meines Umweges über ein anderes Verzeichnis. Und man muß beim Mehrfachumbenenn-Tool das -Kopie killen, aber gangbar, Danke
Re: Quelle beim Umbenennen erhalten?
nunja, es sollte nebenbei kopierenDalai 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?

Re: Quelle beim Umbenennen erhalten?
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
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64
Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
Re: Quelle beim Umbenennen erhalten?
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
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
Re: Quelle beim Umbenennen erhalten?
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
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64
Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
Re: Quelle beim Umbenennen erhalten?
@alfware17
Welche Scriptsprache nimmts Du denn?
Für PowerShell und Batch hab ich Templates rumliegen bzw man findet auch schnell im Forum was.
Welche Scriptsprache nimmts Du denn?
Für PowerShell und Batch hab ich Templates rumliegen bzw man findet auch schnell im Forum was.
Re: Quelle beim Umbenennen erhalten?
Ich habe das nun geschafft
Hier ist mein Script:
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.

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
)
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.
Re: Quelle beim Umbenennen erhalten?
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.
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.