Feature-Vorschlag: Einfache Kommandozeilen-Makros

German support forum

Moderators: Hacker, Stefan2, white

Post Reply
mjahn
Junior Member
Junior Member
Posts: 7
Joined: 2013-01-27, 10:58 UTC

Feature-Vorschlag: Einfache Kommandozeilen-Makros

Post by *mjahn »

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.
Last edited by mjahn on 2013-01-29, 13:54 UTC, edited 1 time in total.
User avatar
Dalai
Power Member
Power Member
Posts: 9977
Joined: 2005-01-28, 22:17 UTC
Location: Meiningen (Südthüringen)

Post by *Dalai »

Es ist zwar nicht genau das, was du suchst, aber schau dir mal das Starter-Menü genauer an.

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
mjahn
Junior Member
Junior Member
Posts: 7
Joined: 2013-01-27, 10:58 UTC

Post by *mjahn »

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 ...
User avatar
HolgerK
Power Member
Power Member
Posts: 5411
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Post by *HolgerK »

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:

Code: Select all

[em_TC2]
button=%COMMANDER_EXE%
cmd=%COMMANDER_EXE%
param=/S /L=%P /R=%T
menu=Zweiter TC mit momentanem Pfad
Im em-Befehl lassen sich die üblichen Variablen für Buttons (Pfad, selektierte Datei,..) plus
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
benutzen.

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
mjahn
Junior Member
Junior Member
Posts: 7
Joined: 2013-01-27, 10:58 UTC

Post by *mjahn »

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

Code: Select all

srt sort < %N > %O.out /r /+10 

tc2 C:\wincmd\TOTALCMD.EXE /S /L=%P /R=%T 
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.
User avatar
HolgerK
Power Member
Power Member
Posts: 5411
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Post by *HolgerK »

Nun, man könnte in der wincmd.ini die Section

Code: Select all

[Alias]
RedirectSection=%COMMANDER_PATH%\usercmd.ini
umleiten.
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
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
mjahn
Junior Member
Junior Member
Posts: 7
Joined: 2013-01-27, 10:58 UTC

Post by *mjahn »

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
Der Einzeiler sieht zwar einfach aus ...
Also, das sieht nicht nur so aus, das ist so. Und erinnern wir uns, das genau ist der Punkt dieses Themas -- "Einfache Kommandozeilen"

Klar, dann geht dein Satz weiter:
... birgt aber auch Komplikationen: ist %O eine TC Variable oder ein Übergabeparameter
Sicher, aber da wird man doch eine Lösung für finden können, oder? Ist doch eine Herausforderung für einen Programmierer.

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.
User avatar
HolgerK
Power Member
Power Member
Posts: 5411
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Post by *HolgerK »

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.
Als Alternative kann man auch den kurzen DOS-Namen erzeugen lassen:
%n anstelle von %N

Bei %o anstelle von %O wird es dann aber haarig (Test~1.out ..)
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.
Setze mal ein Fragezeichen am Anfang der Parameterdeklaration:

Code: Select all

param=?%n /O %O.out /R /+10
Das erzeugt einen Dialog, in dem die expandierten Parameter vor der Ausführung editiert werden können.
... 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.
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.
- 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.
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.
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. ;) )

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.
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.
Ich glaube der einzige TC-Entwickler (ghisler(Author)) hat tausende Wünsche und Verbesserungsvorschläge auf Halde.
Als Produktverantwortlicher muss er da schon bei begrenzten Resourcen Prioritäten setzen.
... Und dann mache ich es eben häufig doch!
Kleiner Rat aus jahrzehntelanger Erfahrung:
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.
Ich denke mal, TC wäre nicht das, was es ist, wenn ihr nicht ähnlich ticken würdet.
Der TC ist vor allem ein Programm, bei dem viele Lösungen an den unterschiedlichsten Stellen eingesetzt werden können:
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
mjahn
Junior Member
Junior Member
Posts: 7
Joined: 2013-01-27, 10:58 UTC

Post by *mjahn »

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

Code: Select all

""test test.in"" /O "test test.out" /R 
... 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

Code: Select all

param=?"%N" /O "%O.out" /R
Nimmt man dagegen

Code: Select all

param=?%N /O "%O.out" /R
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
User avatar
ZoSTeR
Power Member
Power Member
Posts: 1050
Joined: 2004-07-29, 11:00 UTC

Post by *ZoSTeR »

Versuch mal

Code: Select all

"%O.%E" /O "%O.out" /R
Dies umgeht die "intelligente" Anführungszeichensetzung des TC.
mjahn
Junior Member
Junior Member
Posts: 7
Joined: 2013-01-27, 10:58 UTC

Post by *mjahn »

In der Tat, schlau gedacht, so geht's auch. (Meine Frage zielte eher auf "das alles", das umständliche und fehlerträchtige Erstellen dieser Dinge.)
User avatar
HolgerK
Power Member
Power Member
Posts: 5411
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Post by *HolgerK »

Weitere "ergänzbare" Sonderzeichen waren $ für den Namen des aktuellen Verzeichnisses und $$ für den vollen Verzeichnis-Pfad, $$\% demnach für den vollen Dateinamen einschl. Pfad.
Und eine zweite (andere) Syntax um das Gleiche zu erreichen ist nicht umständlich oder fehlerträchtig?

Gruß
Holger
mjahn
Junior Member
Junior Member
Posts: 7
Joined: 2013-01-27, 10:58 UTC

Post by *mjahn »

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
Post Reply