Interne Kommandos: mehrere auf einmal u/o gemischt in Batch?

German support forum

Moderators: white, Hacker, Stefan2

Post Reply
User avatar
ikarus1969
Junior Member
Junior Member
Posts: 6
Joined: 2016-09-14, 10:28 UTC
Location: Vienna

Interne Kommandos: mehrere auf einmal u/o gemischt in Batch?

Post by *ikarus1969 »

Einen schönen Tag zusammen!

Ich hätte folgende Frage: für einen Eintrag im Startermenü: ist es möglich mehr als ein internes Kommando "hinter" einen Menüeintrag zu legen bzw. als Kommando eine Datei anzugeben, in der mehrere interne KOmmandos eingetragen werden können (eventuell gemischt mit DOS-batch Kommandos)?

Meine Suche führte mich entweder zu uralten Diskussionen über eine Skriptsprache für TC oder zu Lösungen mit externen Tools wie AutoHotkey und Send-Message-Möglichkeiten.

Usprung meiner Frage: ich erzeuge öfters eine ZIP-Datei. Dafür gehe ich so vor: im rechten Panel navigiere ich in das Verzeichnis, in dem die ZIP-Datei liegt. Dort lösche ich die ZIP-Datei. Dann navigiere ich im linken Panel zu dem verzeichnis, das ich als ZIP Datei packen möche, lösche alle enthaltenen BAK.Dateien (über die Alt-F7-Suche, "anwenden" und löschen der gefundenen Dateien), und packe dann das Verzeichnis mit "Alt-F5" vom linken in das rechte Panel.

Diesen Vorgang möchte ich, falls möglich, mit TC automatisieren.
Die internen Kommandos für alle Einzelschritte wären ja vorhanden (wenn ich mich nicht irre). Ob die Zusammenfassung dieser Einzelkommandos möglich ist und wenn ja, wie, das weiss ich allerdings nicht.
User avatar
Stefan2
Power Member
Power Member
Posts: 4153
Joined: 2007-09-13, 22:20 UTC
Location: Europa

TC mittels einer Batch automatisieren scripten steuern

Post by *Stefan2 »

Hallo ika und willkommen.

Mehrere interne Kommandos kannst du, durch ein Komma getrennt, nacheinander aufrufen.

Diese Kommand-kette kanst du auf einen Button legen,
in das Startermenü eintragen,
oder als eigenes benutzerdefiniertes neues Kommando in die usercmd.ini schreiben.

Dieses benutzerdefinierte Kommando kannst du dann in das (Haupt-)Menü einbauen.



Als Beispiele sieh' dir mal das Folgende an:

"Extended English Menus for Total Commander by petermad" - http://www.totalcmd.net/authors/1223914.html

http://ghisler.ch/board/viewtopic.php?p=287481#287481

- - -

Aber du kannst auch die aktuellen Pfade der Pannels
an eine externe Batchdatei übergeben, und dort,
etwa mit 7zip, alles in dieser Batch erledigen lassen.

Dort hast du auch bessere Kontrolle über zB Pausen und Arbeitsabläufe.
Noch besser aber mittels VBScript, PowerShell oder AutoHotkey.


CMD: meineBatch.cmd "%P" "%T"

Für die Parameter %P/%T öffne mal einen Button, und drück die F1-Taste.

- - -

EDIT:

BEISPIEL mittels einer DOS Batch:

Code: Select all

@ECHO OFF


GOTO _START
-------------------------------------------------------------------------------
Usprung meiner Frage: ich erzeuge öfters eine ZIP-Datei.  Dafür gehe ich so vor: 

im rechten Panel navigiere ich in das Verzeichnis, in dem die ZIP-Datei liegt. 
Dort lösche ich die ZIP-Datei. 

Dann navigiere ich im linken Panel zu dem verzeichnis, das ich als ZIP Datei packen möche, 
lösche alle enthaltenen BAK.Dateien (über die Alt-F7-Suche, "anwenden" und löschen der gefundenen Dateien), 

und packe dann das Verzeichnis mit "Alt-F5" vom linken in das rechte Panel. 

TotalCommander Button:
CMD: "D:\rive\path to\my script.CMD"
PARAM: "%P" "%T"

Zur Erklärung der Parameter %P/%T öffne mal einen Button im TC und drück die F1-Taste.
-------------------------------------------------------------------------------
:_START


SET "ActivePanel=%~1"
SET "TargetPanel=%~2"

ECHO.
ECHO Aktives Panel: %ActivePanel%
ECHO.
ECHO.
ECHO GEPLANTER ABLAUF:
ECHO --------------------------
ECHO.
ECHO DEL %TargetPanel%*.ZIPx
ECHO DEL %ActivePanel%*.BAKx
ECHO.
ECHO PACK von %ActivePanel% 
ECHO nach %TargetPanel%
ECHO.
ECHO.
ECHO Ablauf starten mit ENTER-Taste (Strg+C Tasten zum Abbrechen)
ECHO.
PAUSE >NUL
ECHO.
ECHO OK, wir fangen an:
ECHO ---------------------------
DEL %TargetPanel%*.ZIPx
DEL %ActivePanel%*.BAKx
7za a -tzip "%TargetPanel%MeinNeues.ZIP" *.*
ECHO.
ECHO ENDE
ECHO ---------------------------
ECHO.
PAUSE

 
Last edited by Stefan2 on 2016-09-15, 08:08 UTC, edited 1 time in total.
User avatar
ikarus1969
Junior Member
Junior Member
Posts: 6
Joined: 2016-09-14, 10:28 UTC
Location: Vienna

Post by *ikarus1969 »

Hallo Stefan,

vielen Dank für Deine Antwort!

Ich bin jetzt dank Deiner Antwort schon fast am Ziel.
Durch die Verkettung der "cm_..."-Kommandos konnte ich das meiste erledigen.

Was anfangs nicht funktioniert hat war das Einbeziehen der Verzeichniswechsel in die Verkettung (Kommandos mit Parameter wie z.B. "CD..." oder "SELECTFILES"). In diesem Fall habe dann für jedes benötigte "CD" und "SELECTFILES" ein benutzerdefiniertes Kommando erzeugt ("em_..."), das ich dann in die Verkettung einbeziehen konnte.

Jetzt bräuchte ich noch ein Kommando mit dem man ein bestimmtes Verzeichnis markieren kann - "SELECTFILES" scheint nicht zu funktionieren.
Ich habe z.B.

Code: Select all

SELECTFILES "Verzeichnisname"
oder

Code: Select all

SELECTFILES "Verzechnisname\"
probiert und auch eine Variante mit dem kompletten Pfad des Verzeichnisses, was leider nichts gefruchtet hat.

Der allerletzte Schritt - das Packen des markierten Verzeichnis bringt nach "cm_PackFiles" noch den Dialog, den ich, wenn möglich, übergehen möchte.

Gibt's dazu eine Alternative zu "cm_PackFiles"? (außer jetzt z.B. 7zip mit Parameter zu starten)

Vielen Dank aber auf alle Fälle - die beiden Links aus Deinem Post sind sehr hilfreich!

Reinhart
User avatar
ikarus1969
Junior Member
Junior Member
Posts: 6
Joined: 2016-09-14, 10:28 UTC
Location: Vienna

Post by *ikarus1969 »

für "SELECTFILES" hab ich im Helpfile gelesen, dass man mit sog. "Modifikatoren" festlegen kann, welche Typen von Einträgen man selektieren kann.

Für Verzeichnisse wäre das ein "D". Es steht nur nirgends, wie - in welcher Form - man den Modifikator angeben muss.

Kanns Du mir da weiterhelfen?

Probiert habe ich

Code: Select all

SELECTFILES /D "Verzeichnisname"
,

Code: Select all

SELECTFILES D "Verzeichnisname"
und

Code: Select all

SELECTFILES  "Verzeichnisname" D
Man is incredible: in a world full of untold secrets he invented boredom
User avatar
Stefan2
Power Member
Power Member
Posts: 4153
Joined: 2007-09-13, 22:20 UTC
Location: Europa

SELECTFILES modifiers Modifikatoren

Post by *Stefan2 »

Modifikatoren? Ja, da war 'was...
Ich glaube, die muss man DIREKT an den Befehl anfügen???

selectfilesD

Eine Forumsuche hilft da oft, hat aber auch bei mir etwas gedauert:
http://ghisler.ch/board/viewtopic.php?t=27657[face=comicsansms]&highlight=selectfiles+modifiers[/face]

selectfiles modifiers Modifikatoren
Sombra wrote:[em_SeleccionDePanelActual2Destino]
menu=Ausgewähltes auch im Target auswählen
Select in target panel, items marked in source panel
cmd=SELECTFILESBTS
Param=%Z%S

[em_DesMarcarPanelActual2Destino]
menu=Ausgewähltes im Target ABwählen
Unselect in target panel, items marked in source panel
cmd=SELECTFILESBTUS
Param=%Z%S

---
[em_SeleccionarPanelDestino2Actual]
menu=Im Target Ausgewähltes hier ebenfalls auswählen
Select in current panel, items marked in target panel
cmd=SELECTFILESBS
Param=%Z%R

[em_DesMarcarPanelDestino2Actual]
menu=Im Target Ausgewähltes hier ABwählen
Unselect in current panel, iteme marked in target panel
cmd=SELECTFILESUBS
Param=%Z%R

Danke, Sombra.
User avatar
ikarus1969
Junior Member
Junior Member
Posts: 6
Joined: 2016-09-14, 10:28 UTC
Location: Vienna

Post by *ikarus1969 »

oh gott :shock: - dass der Modifikator direkt an das Kommando angehängt wird wäre mir nicht im Traum eingefallen...

Dankeschön!
Man is incredible: in a world full of untold secrets he invented boredom
User avatar
Stefan2
Power Member
Power Member
Posts: 4153
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Post by *Stefan2 »

ikarus1969 wrote:oh gott :shock: - dass der Modifikator direkt an das Kommando angehängt wird wäre mir nicht im Traum eingefallen...
Mir ebenfalls nicht, und ich träume viel.
Auch nicht, dass man diese Modifikatoren kombinieren kann.


Habe eine Suggestion erstellt, die Hilfe entsprechend anzupassen:
http://ghisler.ch/board/viewtopic.php?t=45671






 
User avatar
tom*de
Senior Member
Senior Member
Posts: 394
Joined: 2003-02-25, 09:21 UTC

mehrere interne Kommandos hintereinander ausführen?

Post by *tom*de »

Ich versuche mehrere interne Kommandos per Batch auszuführen, z.B.:

Code: Select all

cm_FocusLeft
cd <directory>
cm_FocusRight
cd <directory>
cm_FileSync
1. Mit folgendem Button klappt zwar der Verzeichniswechsel, aber warum wird das 2. Kommando cm_FileSync nicht aufgerunfen?

Code: Select all

Kommando: cd "C:\Users\", cm_FileSync
Startpfad: C:\IMG\
2. Habe es versucht mit Autohotkey und: http://www.ghisler.ch/wiki/index.php/AutoHotkey:_Send_a_command_to_Total_Commander

scheitere aber wieder beim cd-Kommando:

Code: Select all

AutoHotkeyU64.exe sendTCCommand.ahk cd C:\USERS
3. Das Kommando:

Code: Select all

AutoHotkeyU64.exe sendTCCommand.ahk cm_FileSync
funktioniert grundsätzlich, bringt aber gelegentlich:
---------------------------
Total Commander 9.0a
---------------------------
Access violation.
Access violation
Windows 10 10.0 (Build 10586), base: 0400000

Please report this error to the Author, with a description
of what you were doing when this error occurred!

Stack trace (x64):6A00F8
71707B 6F4FD9 829990 81E363 4368D9 919381 85C23B 9235CB
7FFD91901169
Press Ctrl+C to copy this report!
Continue execution?
---------------------------
Ja Nein
---------------------------
Bin ich hier auf dem richtigen Weg mit AHK?
Tom - #81178 - 5 User licence - Klugheit, Gerechtigkeit, Tapferkeit und Mäßigung plus Kooperation.
User avatar
tuska
Power Member
Power Member
Posts: 3755
Joined: 2007-05-21, 12:17 UTC

Re: mehrere interne Kommandos hintereinander ausführen?

Post by *tuska »

tom*de wrote:Ich versuche mehrere interne Kommandos per Batch auszuführen, z.B.:

Code: Select all

cm_FocusLeft
cd <directory>
cm_FocusRight
cd <directory>
cm_FileSync
1. Mit folgendem Button klappt zwar der Verzeichniswechsel, aber warum wird das 2. Kommando cm_FileSync nicht aufgerunfen?

Code: Select all

Kommando: cd "C:\Users", cm_FileSync
Startpfad: C:\IMG\
Weil Du hier einen MS-DOS Befehl mit einem internen Kommando von TC gemeinsam verwendet hast.

Wenn Du jedoch einen em_Befehl anlegst, zB mit Namen em_C-Users und Kommando: cd C:\Users\ und danach
beide internen Befehle kombinierst - Kommando: em_C-Users, cm_filesync dann funktioniert das.

Wenn ich Deinen ersten Code jedoch richtig interpretiere möchtest Du zwei Verzeichnisse synchronisieren.
Ich habe mir szt. aus Forumsbeiträgen diese zwei Buttons notiert:

1. Aktuelle Verzeichnisse im linken und rechten Fenster von TC synchronisieren (separater Task)

Code: Select all

TOTALCMD#BAR#DATA
%COMMANDER_EXE%
/S=S:= "%X%Z%P" "%T"
TOTALCMD.EXE,32
AKTUELLE Verz. synchronisieren || sep. Task! || Vergleich startet SOFORT!
%COMMANDER_PATH%\
0
-1

2. Synchronisieren von zwei vordefinierten Verzeichnissen (separater Task)
Die beiden Pfade und den Tooltip mußt Du erst nach Deinen Wünschen anpassen!

Code: Select all

TOTALCMD#BAR#DATA
%Commander_Path%\TOTALCMD.EXE /S=S:= "C:\Program Files (x86)\MyPhoneExplorer" "D:\MyPhoneExplorer_Laufwerk-C"

wcmicons.dll,48
Synchronisieren von 2 vordefinierten Verzeichnissen, |zB "C:\Program Files (x86)\MyPhoneExplorer" |mit "D:\MyPhoneExplorer_Laufwerk-C"

0
-1
Du kannst den Code wie folgt nutzen:
1. Markiere den Code (einfach die linke Maustaste gedrückt halten und über den Code drüberziehen, dann linke Maustaste loslassen)
2. Drücke die STRG-Taste und halte sie gedrückt, dann drücke den Buchstaben "C" (STRG + C = kopieren in die Zwischenablage)
3. Tätige einen Rechtsklick auf einen freien Platz in der Buttonbar [zB nach dem letzten Button oder zwischen den Buttons]
4. Klicke auf den Menüpunkt "Einfügen"
5. [Optional: Zeige (etwas länger) mit dem Cursor auf den neuen Button: "Tooltip" erscheint (-> Beschreibung zum Button)]
6. Nur für 2. Button(!) => Rechtsklick auf Button, dann "Ändern" -> im Feld Kommando beide Pfade anpassen
Gruß,
Karl
User avatar
tom*de
Senior Member
Senior Member
Posts: 394
Joined: 2003-02-25, 09:21 UTC

Post by *tom*de »

Danke Karl,
ja ich möchte mehrere Verzeichnisse auf zwei Rechnern synchronisieren - das klappt per Batch-CMD im Netzwerk und em_SyncFile (sep. Task) auch prima.
Allerdings geht dass nicht bei Port-Verbindung mit USB-Kabel:
http://www.ghisler.ch/board/viewtopic.php?t=45214&highlight=usb
Da funktioniert kein em_SyncFile nur das cm_SyncFile.

Also für jedes Verzeichnis einen Knopf/em_ anlegen war mir zu umständlich. Mit Deinem cut/paste wird der Aufwand schon geringer... Aber vielleicht geht das noch einfacher:

Vielleicht weiß jemand wie man per o.g. AHK-Script (Fernsteuerung des TC) die TC-Verzeichnisse eingestellt?
Tom - #81178 - 5 User licence - Klugheit, Gerechtigkeit, Tapferkeit und Mäßigung plus Kooperation.
User avatar
tuska
Power Member
Power Member
Posts: 3755
Joined: 2007-05-21, 12:17 UTC

Post by *tuska »

tom*de wrote:Also für jedes Verzeichnis einen Knopf/em_ anlegen war mir zu umständlich.
Die Verzeichnisse in TC, welche synchronisiert werden sollen in die Verzeichnisliste aufnehmen geht nicht?
... Menü "Befehle" - "Verzeichnisliste <Strg+D>" ...
User avatar
tom*de
Senior Member
Senior Member
Posts: 394
Joined: 2003-02-25, 09:21 UTC

Post by *tom*de »

Ja danke Tuska. Doch, mit der Verzeichnisliste <Strg+D> geht es (auch für den Fall einer PortZuPort-Verbindung) - doch ich möchte danach gleich das cm_SyncFile aufrufen.

wincmd.ini

Code: Select all

menu98=USB-Sync &Doc
cmd98=cd C:\Users\me\Documents\
path98=port://usb/C:/Users/me/Documents/
Aber da muss ich soviel Testen drücken ;) denn ich habe mehrere Verzeichnisse zu synchronisieren und würde deshalb gerne so viel wie möglich nacheinander automatisiert aufrufen:
1. Change Directory (einstellen der 2 TC-Panels)
2. cm_SyncFile
- welches dann am besten gleich mit dem Vergleich und den richtigen Voreinstellungen startet
- Also genauso elegant wie mit dem TC-Sync in eigener Instanz (per Kommandozeile) möglich: totalcmd64.exe /S=S:=...
- aber dieses TC-Sync in eigener Instanz kennt (im Gegensatz zu Netzwerkverbindungen) meine bestehende TC-USB-Port2Port-Verbindung nicht... siehe: Verbindung über USB-Kabel

Deshalb erschien mir die Fernsteuerung per AHK Script vielversprechend, aber da bekomme ich das simple Einstellen der 2 TC-Panel nicht hin - vermutlich weil das AHK Script nicht mit Kommandos umgehen kann, welches Parameter hat. :(
Tom
Tom - #81178 - 5 User licence - Klugheit, Gerechtigkeit, Tapferkeit und Mäßigung plus Kooperation.
Post Reply