Kopieren mit anhängen des Zeitstempels

German support forum

Moderators: white, Hacker, Stefan2

Post Reply
pddzaic
Junior Member
Junior Member
Posts: 13
Joined: 2012-06-03, 11:56 UTC

Kopieren mit anhängen des Zeitstempels

Post by *pddzaic »

Hallo zusammen

ich nutze nun seit Jahren den TC, habe mich aber bisher noch nicht an automatisierbare Aufgaben herangewagt, wie beispielweise die Folgende:

Ich möchte gerne zwecks Backup beim Drücken einer Tastenkombination (Shift + F5) die Datei von dem linken Fenster ins rechte kopieren und danach an den Dateinamen das Datum und die Uhrzeit der kopierten Datei anfügen.

Ich vermute, dass ich die Aufgabe mit einer Batch-Datei erledigen muss. Die Batchdatei rufe ich dann mittels Tastenkombination auf. Wie dieser Schritt geht, weiss ich, jedoch stellt mir zurzeit folgendes Nichtwissen vor unüberwindbare Schwierigkeiten:

1. Wie übergebe ich der Batchdatei den Dateiname (inkl. Pfad) der im linken Fenster von TC ausgewählten Datei?
2. Wie übergebe ich der Batchdatei das Verzeichnis im rechten fenster von TC?

Falls ich über das Ziel hinausschiesse, würde ich mich über einen alternativen Vorschlag sehr freuen, wie die Aufgabe zu bewerkstelligen wäre.
User avatar
Stefan2
Power Member
Power Member
Posts: 4132
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Re: Kopieren mit anhängen des Zeitstempels

Post by *Stefan2 »

Hi
pddzaic wrote:...

1. Wie übergebe ich der Batchdatei den Dateiname (inkl. Pfad) der im linken Fenster von TC ausgewählten Datei?
2. Wie übergebe ich der Batchdatei das Verzeichnis im rechten fenster von TC?

...
- Rechtsklick auf einen Button
- Andern...
- F1-Taste drücken (und den Button-Dialog schließen)
- Lese:
1. %P%N (oder "%S")
2. "%T"


Als kleinen Test Copy&Paste diesen Code auf die TC-Buttonleiste:

Code: Select all

TOTALCMD#BAR#DATA
cmd /k
ECHO %P%N & ECHO "%T"
C:\Windows\system32\cmd.exe
TEST ECHO %P%N ---- "%T"


-1
Dann eine Datei markieren (einmal mit und einmal ohne Leerzeichen) und den Button anklicken.




Für "jede ausgewählte Datei" verwende "%L" (oder andere) und zB eine Batch mit Befehlen wie dieser Pseudo-Code "for %A in ("%L") DO xxx mit %A"


Tipp: durchsuche mal das Forum, zu diesem Thema gibt es 378 weitere Beispiele. (grob geschätzt, können auch 2 bis 3 mehr sein)



- - -


Den Teil mit "das Datum und die Uhrzeit der kopierten Datei anfügen" bekommst du hin?
Welches "Datum und Uhrzeit" meinst du eigentlich? Erstellt, Geändert, Aktuell?





 
pddzaic
Junior Member
Junior Member
Posts: 13
Joined: 2012-06-03, 11:56 UTC

Post by *pddzaic »

Hallo stefan2

Herzlichen Dank für dein Posting. War leider in der Zwischenzeit im Urlaub, sodass ich mich erst jetzt dieser Aufgabe widmen kann.

Den Button konnte ich nach einem blöden Interpretationsfehler deiner Anweisung erfolgreich in die TC-Menüleiste integrieren. Deine Code beantwortet auch meine Fragen. Jetz muss ich mich wohl an die Batschdatei machen.

Würde es auch mit TC-Bordmitteln (ohne Batch-Datei) gehen, zumindest bei einer Datei?

Das Kopieren habe ich nun mit

Code: Select all

Copy %P%N "%T"
im Parameterfeld des Buttons hinbekommen. In der Hilfe habe ich unter Dialogbox: Konfigurieren - Buttonbar ändern die ganzen Parameter gefunden, jedoch entdecke ich nirgends etwas, womit in das Datum & Co. auslesen kann. Ich vermute, dass dieser Weg hier beendet ist.

Wenn ich es richtig verstehe muss ich die gesamten Kommandos in das Parameterfeld eintragen.
User avatar
Stefan2
Power Member
Power Member
Posts: 4132
Joined: 2007-09-13, 22:20 UTC
Location: Europa

PowerShell: Kopiere mit Timestamp

Post by *Stefan2 »

Mit TC-Bordmitteln, zumindest ohne Umwege, geht dass glaub' ich nicht.

---

>>Copy %P%N "%T"
Sehr gut!


>>> jedoch entdecke ich nirgends etwas, womit in das Datum & Co. auslesen kann. Ich vermute, dass dieser Weg hier beendet ist.
Das geht über Plugins, zB bei Attributeändern oder im MUT MultiumbenennTool.
Aber dann müsste man das Datum noch umsortieren und die Doppelpunkte raus nehmen. Das geht auch, über "Teilstrings", siehe Hilfe im MUT.
Aber da kann ich auch gleich ein externes Skript verwenden (IMHO).


>>Wenn ich es richtig verstehe muss ich die gesamten Kommandos in das Parameterfeld eintragen.
Das Kommando in die Kommandobox, die Parameter in die Parameterbox.

---

Hier ist ein PowerShell-Skript als Button zum Copy&Paste auf die TC-Buttonbar:

Code: Select all

TOTALCMD#BAR#DATA
PowerShell
TYPE '%L'|Foreach{$F=(GI $_);$N=($F.BaseName+"""_{0:yyyy-MM-dd_HHmm}""" -f $F.LastwriteTime+$F.Extension);COPY $F """%T$N"""}
c:\windows\system32\windowspowershell\v1.0\powershell.exe
PowerShell TEST: Kopiere nach %T mit Timestamp


-1
Dies funktioniert für alle ausgewählten Dateien (und Ordner, aber ohne den Inhalt mit zu kopieren), somit auch bei einer einzelnen Datei,




Erklärung:

TYPE '%L'|Foreach{$F=(GI $_);$N=($F.BaseName+"""_{0:yyyy-MM-dd_HHmm}""" -f $F.LastwriteTime + $F.Extension);COPY $F """%T$N"""}


Type ist ein PoSh-Alias von Get-Content.
%L und %T => TC-Parameter

$F=(Get-Item $_) => Zugriff auf ein reales Objekt anhand der Textzeile in TCs %L-Tempdatei.

$F.BaseName => nur den Namensteil ohne Erweiterung.
Hier ginge auch: $F.Name, dann inklusive Erweiterung.

$N=(...) => Neuer Name aus BaseName von $F und Zeichenkette aus Änderungsdatum von $F plus Erweiterung.

Anführungszeichen muss ich im Button verdreifachen.

Das Änderungsdatum wird mittels "{0:yyyy}-{0:MM}-{0:dd}_{0:HHmm}" neu sortiert um als Dateiname benutzt zu werden.
Hier ginge auch zB: "_(BACKUP STAND {0:yyyy.MM.dd.HHmm})"
Außerdem habe ich einen Unterstrich vorne dran gestellt.





HTH? :D - Ansonsten bei Fragen fragen.


.
pddzaic
Junior Member
Junior Member
Posts: 13
Joined: 2012-06-03, 11:56 UTC

Merci

Post by *pddzaic »

Puuuh....das ist genau das was ich brauche und ich bin mir sicher, dass ich mir das alles bei töglichem Studium bis Weihnachten nicht angelesen hätte.

Herzlichen Dank. Die Kiste Bier sei Dir sicher.
User avatar
Stefan2
Power Member
Power Member
Posts: 4132
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Re: Merci

Post by *Stefan2 »

pddzaic wrote:Puuuh....das ist genau das was ich brauche
Fein.

pddzaic wrote:Herzlichen Dank. Die Kiste Bier sei Dir sicher.
Hilf einfach auch zwei Anderen mit deinem Wissen, dann sind wir quitt.





 
pddzaic
Junior Member
Junior Member
Posts: 13
Joined: 2012-06-03, 11:56 UTC

Post by *pddzaic »

Hi stefan2

Zwei Frage hätte ich da noch. Du schreibst in deinem Code

Code: Select all

{0:yyyy-MM-dd_HHmm}
Wofür sorgt dieses 0:?

Kennst Du ein (gutes) Einsteigertutorial für die PowerShell? Ich werde eh Google bemühen, aber nin für jeden Ratschlag dankbar.
User avatar
Stefan2
Power Member
Power Member
Posts: 4132
Joined: 2007-09-13, 22:20 UTC
Location: Europa

PowerShell: "-f Format Operator"

Post by *Stefan2 »

Hi pddzaic

Die '0' steht für "hier die erste INFO hinter dem '-f' als Basis verwenden".

"Abc {0} hijkl {1} pqrst {2}" -f INFO-1,INFO_2, INFO3

Vergleiche unser
"""_{0:yyyy-MM-dd_HHmm}""" -f $F.LastwriteTime


---


Die '0' kann auch mehrmals vorkommen, zB:
"""_{0:yyyy}-{0:MM}-{0:dd}_{0:HHmm}""" -f $obj.LastwriteTime

(Wie so oft in der Informatik, wird aus historischen Gründe bei '0' angefangen zu zählen)


Dieses Konstrukt nennt sich PowerShell "-f Format Operator"


Als kleinen Test probier mal in der PS-Konsole:
"Abc {0} hijkl {1} pqrst {2}" -f "defg", "mno", "uvwxyz"
-oder-
"One : {1} Two : {2} Three : {3}" -f "", "Eins;", "Zwei;", "Drei"
-oder-
"One : {1} Two : {2} Three : {0}" -f "Drei", "Eins;", "Zwei;"


Infos dazu zB bei
https://ss64.com/ps/syntax-f-operator.html
'Filename: {0} Created: {1}' -f $_.fullname,$_.creationtime



---


Einsteigertutorial für die PowerShell habe ich versucht dort zu sammeln (am Ende des Posts bei "Weiterführende Infos"):
http://ghisler.ch/board/viewtopic.php?p=323982#323982

Wenn ich dort noch 'was aufnehmen soll, ...nur her damit ;-)



 
pddzaic
Junior Member
Junior Member
Posts: 13
Joined: 2012-06-03, 11:56 UTC

Post by *pddzaic »

Herzlichen Dank für die tolle Erklärung und für den Link. Da steht ja fast alles drinnen. Habe dieses Wochenende einiges zu tun, hoffentlich regnet es. .-)

Super tolle Arbeit!
Post Reply