Feature-Vorschlag: Einfache Kommandozeilen-Makros
Moderators: Hacker, Stefan2, white
Feature-Vorschlag: Einfache Kommandozeilen-Makros
Hallo zusammen! Habe TC schon sehr lange und vermisse eigentlich nichts. Ausser vielleicht dies: in DOS-Zeiten gab es mal einen Datei-Commander, in dem konnte man selbst sehr leicht Makros für Kommandozeilenaufrufe erstellen. Man schrieb dann in eine Definitionsdatei (sagen wir für unsere Belange mal TC_makros.txt) Zeilen wie zB
srt sort < % > %.out /r /+10
und das Programm ersetzte dann für % den aktuellen Dateinamen und für %. nur den Namen ohne Extenrsion. Man gab dann nur das Kürzel "srt" + Leerzeichen in das Kommandozeilenfenster ein, und die Zeile wurde unter Verwendung des aktuellen Dateinamens ersetzt durch eine fertige Kommandozeile wie etwa:
sort < test123.txt > test123.out /r /+10
Überlegt's mal, wären die Möglichkeiten nicht ungeheuer??
Edit: einiges gelöscht.
srt sort < % > %.out /r /+10
und das Programm ersetzte dann für % den aktuellen Dateinamen und für %. nur den Namen ohne Extenrsion. Man gab dann nur das Kürzel "srt" + Leerzeichen in das Kommandozeilenfenster ein, und die Zeile wurde unter Verwendung des aktuellen Dateinamens ersetzt durch eine fertige Kommandozeile wie etwa:
sort < test123.txt > test123.out /r /+10
Überlegt's mal, wären die Möglichkeiten nicht ungeheuer??
Edit: einiges gelöscht.
Last edited by mjahn on 2013-01-29, 13:54 UTC, edited 1 time in total.
Es ist zwar nicht genau das, was du suchst, aber schau dir mal das Starter-Menü genauer an.
MfG Dalai
MfG Dalai
#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
Hast recht, da ist schon massig Funktionalität drin. Fand das Erstellen der Zeilen dort allerdings immer etwas mühsam -- liegt sicher an mir.
Und einen Vorgang wie
sort < in > out /r
dort zu implementieren ist nicht so einfach, oder?
Edit ... und die erstellte Kommandozeile wäre ad hoc editierbar ...
Und einen Vorgang wie
sort < in > out /r
dort zu implementieren ist nicht so einfach, oder?
Edit ... und die erstellte Kommandozeile wäre ad hoc editierbar ...
Konfiguration -> Diverses -> Alias
- Alias (Tastenkürzel für Kommandozeile vergeben)
- Kommando auswählen bzw. über ein em_command die Aufruffolge angeben:
z.b.
(o) Alias: TC2
Befehl: em_TC2
und der entsprechende Befehl in der usercmd.ini (geht auch aus dem Befehlsauswahldialog heraus) angelegt: Im em-Befehl lassen sich die üblichen Variablen für Buttons (Pfad, selektierte Datei,..) plus
Ist zwar eine Indirektion zusätzlich (alias->em_Befehl) dafür lassen sich die meisten em_Befehle auch direkt auf Buttons usw. legen.
Gruß
Holger
- Alias (Tastenkürzel für Kommandozeile vergeben)
- Kommando auswählen bzw. über ein em_command die Aufruffolge angeben:
z.b.
(o) Alias: TC2
Befehl: em_TC2
und der entsprechende Befehl in der usercmd.ini (geht auch aus dem Befehlsauswahldialog heraus) angelegt:
Code: Select all
[em_TC2]
button=%COMMANDER_EXE%
cmd=%COMMANDER_EXE%
param=/S /L=%P /R=%T
menu=Zweiter TC mit momentanem Pfad
benutzen.Nur beim Definieren von Alias-Befehlen:
%A Fügt den Rest der Kommandozeile ein
%A1..%A9 Fügt den ersten bis neunten Parameter ein.
Beispiel: Alias op zeigt auf Befehl: totalcmd.exe Parameter: /L=%A1 /R=%A2
-> Kommandozeile op c:\dir1 d:\dir2 erzeugt Befehl totalcmd.exe /L=c:\dir1 /R=d:\dir2
Ist zwar eine Indirektion zusätzlich (alias->em_Befehl) dafür lassen sich die meisten em_Befehle auch direkt auf Buttons usw. legen.
Gruß
Holger
Wow, diese Tiefen waren mir total unbekannt, das muss ich zugeben. Hatte schon geahnt, dass eigentlich alles möglich ist...
Nur, wäre es nicht doch eine nette Alternative, sagen wir mal für Dummies wie mich, so etwas wie
einfach als Zeilen in eine Datei zu schreiben? (Immerhin habe ich wenigstens schon mal die richtigen Kürzel verwendet!!). Die könnte ich dann auch leicht editieren, an einen anderen weitergeben usw usw.
Nur, wäre es nicht doch eine nette Alternative, sagen wir mal für Dummies wie mich, so etwas wie
Code: Select all
srt sort < %N > %O.out /r /+10
tc2 C:\wincmd\TOTALCMD.EXE /S /L=%P /R=%T
Nun, man könnte in der wincmd.ini die Section
umleiten.
Dann hat man für das manuelle Bearbeiten alles benötigte innerhalb einer Datei (usercmd.ini):
lässt sich dann zumindest schneller mit einem Texteditor öffnen/bearbeiten.
Oder man benutzt eine MDI-Texteditor in dem dann Usercmd.ini und Wincmd.ini gleichzeitig geöffnet sind.
Der Einzeiler sieht zwar einfach aus, birgt aber auch Komplikationen: ist %O eine TC Variable oder ein Übergabeparameter.
Bei den cmd= param= Feldern kennt man zumindest die Einschränkungen / Umwege des Commandbuttons (TC-Variablen nur im Param-Feld / %% anstelle von %) und hat ein Oberfläche zum editieren, aus der heraus man auch die Hilfe direkt aufrufen kann.
Gruß
Holger
Code: Select all
[Alias]
RedirectSection=%COMMANDER_PATH%\usercmd.ini
Dann hat man für das manuelle Bearbeiten alles benötigte innerhalb einer Datei (usercmd.ini):
Code: Select all
[Alias]
srt=em_srt
[em_srt]
cmd=sort.exe
button=
param="%N" /O "%O.out" /R /+10
Oder man benutzt eine MDI-Texteditor in dem dann Usercmd.ini und Wincmd.ini gleichzeitig geöffnet sind.
Der Einzeiler sieht zwar einfach aus, birgt aber auch Komplikationen: ist %O eine TC Variable oder ein Übergabeparameter.
Bei den cmd= param= Feldern kennt man zumindest die Einschränkungen / Umwege des Commandbuttons (TC-Variablen nur im Param-Feld / %% anstelle von %) und hat ein Oberfläche zum editieren, aus der heraus man auch die Hilfe direkt aufrufen kann.
Gruß
Holger
Holger, vorweg, ich finde es Klasse, dass du dich so engagiert und konstruktiv um mein Anliegen kümmerst.
Damit du nicht denkst ich bin beratungsresistent bin ich deinen letzten Anweisungen gefolgt. (Ohne diese konkreten Anweisungen hätte ich übrigens nicht gewusst, wo ich anfangen sollte.) Es hat auch geklappt.
Ich habe also dein [Alias] in wincmd.ini (bzw meine Version wincmdMJ.ini) reingestellt. Dann habe ich eine Usercmd.ini erstellt (da war bisher keine), mit deinem Inhalt.
Nun kann ich in der Tat "srt" in der Kommandozeile von TC absetzen, und es wird bei Input test.in eine Outputdatei test.out erzeugt. Das funktioniert also soweit. Ich vermute, du setzt %N in Anführungszeichen, um auch Dateien mit Leerstellen im Namen zu fangen. Allerdings klappt das bei mir mit einer Datei wie "test test.in" nicht. Mag aber an sort.exe liegen. Ignorieren wir das mal für den Augenblick.
Ein kleines Problem sehe ich nun in der reinen Verkürzung auf das Alias in der Kommandozeile - ich gebe nur srt ein und dann geschieht irgendetwas, eventuell etwas gar nicht Beabsichtigtes, daher wäre die Vorlage der voll expandierten Kommandozeile (wie für meine Version gedacht) sicher nützlich.
(Hey, du musst doch schließlich selber wissen, was du da definiert hast.)
Aber zurück zur Sache. Holger, du sagst selbst
Klar, dann geht dein Satz weiter:
In meiner eigenen Arbeit stoße ich in Dokumentationen auf Dutzende Muster-Kommandozeilen, bei denen es schön wäre, wenn man sie einfach kopieren und in TC mit den eigenen Dateien ausprobieren könnte. Manchmal sind es auch Kommandozeilen, die vielleicht nur ein- oder zweimal benutzt werden. Oder solange ausgetestet werden müssen, bis man sicher ist, dass sie funktionieren.
(Hey kann man doch schon...)
Nun bin ich selbst ein Entwickler (Spiele-Software) und bekomme gelegentlich auch Feedback und Verbesserungsvorschläge von meinen Usern. Mein erster Instinkt ist dann zu sagen, brauchen wir nicht, haben wir schon, lies doch die Wiki.
... Und dann mache ich es eben häufig doch!
Ich denke mal, TC wäre nicht das, was es ist, wenn ihr nicht ähnlich ticken würdet.
In diesem Sinne
LG Manfred
Edit: Einiges nachträglich berichtigt.
Damit du nicht denkst ich bin beratungsresistent bin ich deinen letzten Anweisungen gefolgt. (Ohne diese konkreten Anweisungen hätte ich übrigens nicht gewusst, wo ich anfangen sollte.) Es hat auch geklappt.
Ich habe also dein [Alias] in wincmd.ini (bzw meine Version wincmdMJ.ini) reingestellt. Dann habe ich eine Usercmd.ini erstellt (da war bisher keine), mit deinem Inhalt.
Nun kann ich in der Tat "srt" in der Kommandozeile von TC absetzen, und es wird bei Input test.in eine Outputdatei test.out erzeugt. Das funktioniert also soweit. Ich vermute, du setzt %N in Anführungszeichen, um auch Dateien mit Leerstellen im Namen zu fangen. Allerdings klappt das bei mir mit einer Datei wie "test test.in" nicht. Mag aber an sort.exe liegen. Ignorieren wir das mal für den Augenblick.
Ein kleines Problem sehe ich nun in der reinen Verkürzung auf das Alias in der Kommandozeile - ich gebe nur srt ein und dann geschieht irgendetwas, eventuell etwas gar nicht Beabsichtigtes, daher wäre die Vorlage der voll expandierten Kommandozeile (wie für meine Version gedacht) sicher nützlich.
(Hey, du musst doch schließlich selber wissen, was du da definiert hast.)
Aber zurück zur Sache. Holger, du sagst selbst
Also, das sieht nicht nur so aus, das ist so. Und erinnern wir uns, das genau ist der Punkt dieses Themas -- "Einfache Kommandozeilen"Der Einzeiler sieht zwar einfach aus ...
Klar, dann geht dein Satz weiter:
Sicher, aber da wird man doch eine Lösung für finden können, oder? Ist doch eine Herausforderung für einen Programmierer.... birgt aber auch Komplikationen: ist %O eine TC Variable oder ein Übergabeparameter
In meiner eigenen Arbeit stoße ich in Dokumentationen auf Dutzende Muster-Kommandozeilen, bei denen es schön wäre, wenn man sie einfach kopieren und in TC mit den eigenen Dateien ausprobieren könnte. Manchmal sind es auch Kommandozeilen, die vielleicht nur ein- oder zweimal benutzt werden. Oder solange ausgetestet werden müssen, bis man sicher ist, dass sie funktionieren.
(Hey kann man doch schon...)
Nun bin ich selbst ein Entwickler (Spiele-Software) und bekomme gelegentlich auch Feedback und Verbesserungsvorschläge von meinen Usern. Mein erster Instinkt ist dann zu sagen, brauchen wir nicht, haben wir schon, lies doch die Wiki.
... Und dann mache ich es eben häufig doch!
Ich denke mal, TC wäre nicht das, was es ist, wenn ihr nicht ähnlich ticken würdet.
In diesem Sinne

LG Manfred
Edit: Einiges nachträglich berichtigt.
Als Alternative kann man auch den kurzen DOS-Namen erzeugen lassen:mjahn wrote:Das funktioniert also soweit. Ich vermute, du setzt %N in Anführungszeichen, um auch Dateien mit Leerstellen im Namen zu fangen. Allerdings klappt das bei mir mit einer Datei wie "test test.in" nicht. Mag aber an sort.exe liegen.
%n anstelle von %N
Bei %o anstelle von %O wird es dann aber haarig (Test~1.out ..)
Setze mal ein Fragezeichen am Anfang der Parameterdeklaration:Ein kleines Problem sehe ich nun in der reinen Verkürzung auf das Alias in der Kommandozeile - ich gebe nur srt ein und dann geschieht irgendetwas, eventuell etwas gar nicht Beabsichtigtes, daher wäre die Vorlage der voll expandierten Kommandozeile (wie für meine Version gedacht) sicher nützlich.
Code: Select all
param=?%n /O %O.out /R /+10
Nun, ein Programmierer kann vieles, aber er wird einem Anwender nur in den seltensten Fällen neben einer existierenden Lösung, eine zweite inkompatible Lösung (mit einer anderen Syntax) für eine absolut ähnliches Problem hinstellen.... Und erinnern wir uns, das genau ist der Punkt dieses Themas -- "Einfache Kommandozeilen"
...
Sicher, aber da wird man doch eine Lösung für finden können, oder? Ist doch eine Herausforderung für einen Programmierer.
- Der Einarbeitungsaufwand, wenn beide Lösungen benutzt werden, verdoppelt sich.
- Der Anwender wird irgendwann mal die falsche Syntax an der falschen Stelle einsetzten und frustriert nach Fehlern suchen.
Die Kommandozeile/Button-Commands des TC sind nicht eine komplette Nachbildung des Kommandointerpreters (rate mal warum ich dein Sort-Beispiel "sort < test123.txt > test123.out /r /+10" umformuliert habe.In meiner eigenen Arbeit stoße ich in Dokumentationen auf Dutzende Muster-Kommandozeilen, bei denen es schön wäre, wenn man sie einfach kopieren und in TC mit den eigenen Dateien ausprobieren könnte. Manchmal sind es auch Kommandozeilen, die vielleicht nur ein- oder zweimal benutzt werden. Oder solange ausgetestet werden müssen, bis man sicher ist, dass sie funktionieren.

Wegen des Austesten kann man auch auf die Kommandozeilenhistorie zurückgreifen (STRG-CURSORDOWN oder ALT+F8 ).
Alias oder Macros sind eher für häufig genutzte Kommandos gedacht, bei denen man sich nicht immer kilometerlange Parameter merken möchte.
Ich glaube der einzige TC-Entwickler (ghisler(Author)) hat tausende Wünsche und Verbesserungsvorschläge auf Halde.Nun bin ich selbst ein Entwickler (Spiele-Software) und bekomme gelegentlich auch Feedback und Verbesserungsvorschläge von meinen Usern. Mein erster Instinkt ist dann zu sagen, brauchen wir nicht, haben wir schon, lies doch die Wiki.
Als Produktverantwortlicher muss er da schon bei begrenzten Resourcen Prioritäten setzen.
Kleiner Rat aus jahrzehntelanger Erfahrung:... Und dann mache ich es eben häufig doch!
Es macht Spaß, so etwas mal schnell umzusetzen (den Wünschen von Kunden Folge zu leisten) und zu sehen wie sie davon angetan sind.
Aber: Der Wartbar- und Erweiterbarkeit eines Produktes tut es allerdings nicht gut, allzuviele selten benutzte Sonderimplementierung einzubauen.
Spätestens wenn in einem neuen Release irgendetwas dann nicht mehr funktioniert, bzw. sich mit einer anderen, neuen Funktion beißt, dann kehrt sich die Begeisterung des Kunden in Enttäuschung um und der Entwickler hat seine liebe Mühe und Not die vielen Fäden wieder zum Laufen zu bringen.
Es gibt Programme die auf solche Art und Weise zu hektischen Bugfixzyklen gezwungen wurden und sich letztendlich als nicht mehr vertrauenswürdig beim Kunden manifestiert haben.
-> Kunde unzufrieden, Produkt tot.
Der TC ist vor allem ein Programm, bei dem viele Lösungen an den unterschiedlichsten Stellen eingesetzt werden können:Ich denke mal, TC wäre nicht das, was es ist, wenn ihr nicht ähnlich ticken würdet.
Definiere eine ">Suche"
- Benutze ">Suche" in Alt+F7
- Benutze ">Suche" in Ctrl+F12
- Benutze ">Suche" "Dateien->Interne Verknüpfung.."
- Färbe alle Dateinamen die auf ">Suche" zutreffen in einer bestimmten Farbe ein.
- ...
Definiere einen em_Befehl
- Benutze den em_Befehl in Buttons, Startmenu , Hotkeys, Alias,...
Du sieht das Schema?
Arbeit, die der Anwender sich an einer Stelle machte: "Gruppe von spezifischen Dateien definieren", kann an den verschiedensten Stellen weiter benutzt werden.
Gruß
Holger
Danke auch für diese ausführliche Erläuterung, Holger. Natürlich gibt es Verschlimmbesserungen, brauchen wir nicht zu diskutieren. Ich fände "Kommandozeilen-Makros" eine erhebliche Erleichterung, für die man mich als Neubenutzer ködern könnte, es wäre eine echte "selling proposition". Aber wenn ein Vorschlag nun gar nicht auf Gegenliebe stößt, dann hat es auch keinen Sinn, ihn penetrant zu wiederholen.
Ich schmolle gerne schon mal, ist aber OK.
Nun hast du mir mit deinen diversen Tipps weit weiter geholfen, als ich das per Hilfefunktion oder der Wiki gefunden habe. Anderen Nutzern mag das vielleicht ebenso gehen - obgleich, netto 300 haben dieses Thema bisher gelesen, und nur einer außer uns kommentiert ... seltsam ... aber, mein Punkt: Sollten wir nicht unsere (deine) Tipps und Erkenntnisse mit Beispielen in die Wiki reinstellen?
Ganz kurz noch einmal zu einem kleineren Detail aus deinen letzten Ausführungen. Folge ich deinem Rat im Falle des sort-Beispiels und setze ein "?" hinter param= (super Tip), dann wird mir die Kommandozeile so gezeigt
... also mit doppelten doppelten Anführungszeichen bei xx.in und einfachen doppelten bei xx.out. Darüber stolpert sort offenbar. Das auf der Grundlage von
Nimmt man dagegen
dann funktioniert alles OK (auch ohne Kurznamen).
(Grübelt ... wie könnte man das alles einfacher und intuitiver machen? Kommt aber jetzt nicht drauf ... scheint eben nicht anders zu gehen)
BG
Manfred
Ich schmolle gerne schon mal, ist aber OK.
Nun hast du mir mit deinen diversen Tipps weit weiter geholfen, als ich das per Hilfefunktion oder der Wiki gefunden habe. Anderen Nutzern mag das vielleicht ebenso gehen - obgleich, netto 300 haben dieses Thema bisher gelesen, und nur einer außer uns kommentiert ... seltsam ... aber, mein Punkt: Sollten wir nicht unsere (deine) Tipps und Erkenntnisse mit Beispielen in die Wiki reinstellen?
Ganz kurz noch einmal zu einem kleineren Detail aus deinen letzten Ausführungen. Folge ich deinem Rat im Falle des sort-Beispiels und setze ein "?" hinter param= (super Tip), dann wird mir die Kommandozeile so gezeigt
Code: Select all
""test test.in"" /O "test test.out" /R
Code: Select all
param=?"%N" /O "%O.out" /R
Code: Select all
param=?%N /O "%O.out" /R
(Grübelt ... wie könnte man das alles einfacher und intuitiver machen? Kommt aber jetzt nicht drauf ... scheint eben nicht anders zu gehen)

BG
Manfred
Versuch mal
Dies umgeht die "intelligente" Anführungszeichensetzung des TC.
Code: Select all
"%O.%E" /O "%O.out" /R
Natürlich, auch fehlerträchtig. Ich wollte auch nicht unbedingt die $$-Notation gegen %P antreten lassen, die Platzhalter-Optionen von TC sind ja tatsächlich sehr mächtig.
Insgesamt bedauere ich es, diesen doch sehr unbedarften Thread losgetreten zu haben. Inzwischen weiß ich genauer, dass mehr möglich ist als ich dachte, also ein Lerneffekt ist bei mir da. Dafür vielen Dank!
BG Manfred
Insgesamt bedauere ich es, diesen doch sehr unbedarften Thread losgetreten zu haben. Inzwischen weiß ich genauer, dass mehr möglich ist als ich dachte, also ein Lerneffekt ist bei mir da. Dafür vielen Dank!
BG Manfred