'Vergleichen nach Inhalt' > über Parameter aufrufen?

German support forum

Moderators: white, Hacker, Stefan2

Post Reply
tobsen
Junior Member
Junior Member
Posts: 2
Joined: 2006-01-19, 11:54 UTC

'Vergleichen nach Inhalt' > über Parameter aufrufen?

Post by *tobsen »

Auszug meiner Mail an den Support:
hatte vor einiger Zeit im Chip-Forum eine entsprechende Anfrage gestellt,
http://www.chip.de/c1_forum/thread.html?bwthreadid=872975
Chip-anfrage:
wenn man in der aktuellen TotalCommander 6.53 auf Datei > Vergleichen nach Inhalt geht, bekommt man ein wunderbares Tool zum Vergleichen von Dateien (.txt, Quellcode, XML usw.)

Kennt jemand eine Methode, wie man dieses Tool mit der Commandozeile starten kann, sodass dazu nicht immer TotalCommander geöffnet sein muss?

Alternativ ginge auch, dass der Commander im Hintergrund geöffnet wird und das Tool gleich mit dazu "aufpoppt"
Antwort:
Das geht leider nicht direkt, nur mit einem Script, wie z.B. AutoHotkey oder AutoIt.
Fragen Sie mal in unserem Forum nach (www.ghisler.ch), da gibt es einige Skript- Experten.
Mit freundlichen Gruessen
Christian Ghisler
So ;)
Würde mich über eine Antwort freuen!
User avatar
StickyNomad
Power Member
Power Member
Posts: 1933
Joined: 2004-01-10, 00:15 UTC
Location: Germany

Post by *StickyNomad »

Willkommen!

Eine mögliche Alternative -bis sich einer unserer Script-Gurus deines Problems annimmt- ist die Verwendung des Freeware Tools ExamDiff.

Es ist handlich (~400K EXE), ohne Installation lauffähig und kann über Kommandozeilenparameter mit den zu vergleichenden Dateien aufgerufen werden.
User avatar
Sheepdog
Power Member
Power Member
Posts: 5150
Joined: 2003-12-18, 21:44 UTC
Location: Berlin, Germany
Contact:

Post by *Sheepdog »

Hier ein Autohotkey Script:

Code: Select all

regread, TC,hkey_Current_User,Software\ghisler\Total Commander,installDir
run totalcmd.exe ,%tc%
WinWaitActive ahk_class TTOTAL_CMD
IfWinActive, ahk_class TTOTAL_CMD
  PostMessage, 1075, 2020, , , ahk_class TTOTAL_CMD
return
Damit wird der Totalcmd aus dem Verzeichnis gestartet, in das er installiert wurde. Der Pfad wird aus der Registry gelesen. Wenn TC nicht installiert wurde, sondern nur das Programmverzeichnis kopiert, so gibt es diesen Eintrag nicht. Dann müsste in dem Script in Zeile 2 der Ausdruck %TC% durch den kompletten Pfad zum Total Commander ersetzt werden, z.B. c:\Programme\Totalcmd\, wobei dieser Pfad jedoch nicht in Anführungszeichen zu setzen ist, selbst wenn er Leerzeichen enthält.

Wie man dieses Script anwendet bitte in der TCWiki nachlesen.

sheepdog
"A common mistake that people make when trying to design something
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams
tobsen
Junior Member
Junior Member
Posts: 2
Joined: 2006-01-19, 11:54 UTC

Post by *tobsen »

besten Dank!
werde das script die Tage mal testen, ohne behaupten zu wollen, dass es nicht funktionieren könnte :D
Benni85
Junior Member
Junior Member
Posts: 2
Joined: 2008-08-22, 11:48 UTC

Post by *Benni85 »

Das oben aufgeführte Skript ruft bei mir nur den Total Commander auf
- habe nur die Demoversion für 1 Monat, ist das ein Problem?
und wo kann ich dann die Parameter der zwei Ordner/Dateien angeben?

Im Vorraus vielen Dank
Gruß Benni
User avatar
Hacker
Moderator
Moderator
Posts: 13052
Joined: 2003-02-06, 14:56 UTC
Location: Bratislava, Slovakia

Post by *Hacker »

Benni85,
habe nur die Demoversion für 1 Monat, ist das ein Problem?
Nein, das ist es sicherlich nicht.

Roman
Mal angenommen, du drückst Strg+F, wählst die FTP-Verbindung (mit gespeichertem Passwort), klickst aber nicht auf Verbinden, sondern fällst tot um.
Benni85
Junior Member
Junior Member
Posts: 2
Joined: 2008-08-22, 11:48 UTC

Post by *Benni85 »

hast vllt auch eine Idee zu den parametern?
User avatar
HolgerK
Power Member
Power Member
Posts: 5406
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Post by *HolgerK »

Benni85 wrote:hast vllt auch eine Idee zu den parametern?
ahk-Doku zum run Befehl
target: To pass parameters, add them immediately after the program or document name. If a parameter contains spaces, it is safest to enclose it in double quotes (even though it may work without them in some cases).
TC's Kommandozeilenparameter. Siehe auch Hilfe F1 4.a.

=> in der Zeile "run totalcmd.exe ,%tc%" findet sich zwischen "totalcmd.exe" und ",%tc%" noch ein Plätzchen um zusätzliche Parameter unterzubringen.
Welche das sein sollen, dass solltest du dir schon selbst überlegen. :wink:

HTH,
Holger
TWatcher
Junior Member
Junior Member
Posts: 43
Joined: 2008-08-26, 18:46 UTC

Post by *TWatcher »

Hallo allerseits, dies ist mein erster Beitrag hier im Forum, ich grüße alle TC Fans. :D

Da ich mich seit kurzem mit AHK-Scripts beschäftige, habe ich mir das Problem mal angesehen.
Zunächst aber mal eine Frage an tobsen: Was spricht dagegen den TC zu starten und neben dem "Vergleich nach Inhalt" auch die vielen anderen hilfreichen Funktionen zu nutzen? :roll:

Aber nun zum Thema:
Ich glaube ein Übergabe der Paramter an den TC beim Starten hilft hier nicht.
Eine Möglichkeit wäre, ein AHK-Script erstellen, dem man 2 Parameter übergibt (die zu vergleichenden Dateien).
Das Script startet den TC, aktiviert die "Vergleich nach Inhalt"-Seite, trägt beide Dateinamen ein und startet den Vergleich.
Den TC beenden muss man dann aber manuell.
Hier ein Script, das vielleicht weiterhilft:

Code: Select all

if 0 < 2 
{
  MsgBox, parameter missing, syntax: AHKScriptName.exe <path\file1> <path\file2>
  return
}
else
{
  par1 = %1%
  par2 = %2%
}
IfWinNotExist, ahk_class TTOTAL_CMD
{
  regread, TC, hkey_Current_User,Software\ghisler\Total Commander,installDir
  if TC
  {
    run totalcmd.exe ,%tc%
    WinWaitActive ahk_class TTOTAL_CMD
  }
  else
  {
    MsgBox, cannot start TC, may be TC is not installed
    return
  }
} 
else
{
  WinActivate, ahk_class TTOTAL_CMD 
} 
IfWinActive, ahk_class TTOTAL_CMD
{
  PostMessage, 1075, 2022, , , ahk_class TTOTAL_CMD
  WinWaitActive ahk_class TFileCompForm
  IfWinActive, ahk_class TFileCompForm
  {
    Send +{TAB 4}  
    sendRaw %par1%
    Send {TAB 2}  
    sendRaw %par2%
    send !v
  }
}
return
Die Abfrage "if 0 < 2" prüft, ob 2 Parameter an das Script übergeben wurden, wenn nicht, gibt es eine Fehlermeldung.
Die beiden übergebenen Parameter (jeweils Pfad\Dateiname der zu vergleichenden Dateien) werden als par1 und par2 gespeichert. Dann wird TC gestartet, die "Vergleich nach Inhalt"-Seite aktiviert, die zu vergleichenden Dateinamen eingetragen und der Vergleich gestartet.
Falls Pfad oder Dateiname Leerzeichen enthalten, dann die Parameter in Hochkommas einschließen a la "Pfad\Dateiname"
MfG
TWatcher
User avatar
HolgerK
Power Member
Power Member
Posts: 5406
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Post by *HolgerK »

TWatcher wrote:Hallo allerseits, dies ist mein erster Beitrag hier im Forum, ich grüße alle TC Fans. :D
Gruß zurück und willkommen im Forum.:wink:

Kleiner Verbesserungsvorschlag, um deinen Script von der Interfacesprache des TC's unabhängig zu machen (im Englischen wäre das <Alt+C>"ompare" anstelle von <Alt+V>"ergleichen":
Ersetzte:

Code: Select all

send !v
durch

Code: Select all

send {Enter}
Ich glaube ein Übergabe der Paramter an den TC beim Starten hilft hier nicht.
Oha, da fühle ich mich jetzt herausgefordert :wink: :)

Auf Kosten der Wiederverwertung einer bestehenden TC-Instanz könnte man das in etwa so machen:

Code: Select all

if 0 < 2
{
  MsgBox, parameter missing, syntax: AHKScriptName.exe <path\file1> <path\file2>
  return
}
regread, TC,hkey_Current_User,Software\ghisler\Total Commander,installDir
if TC
{
  run totalcmd.exe /N /L="%1%" /R="%2%" ,%tc%
  WinWaitActive ahk_class TTOTAL_CMD
  IfWinActive, ahk_class TTOTAL_CMD
  {
    send {TAB}{SPACE}{TAB}{SPACE}
    PostMessage, 1075, 2022, , , ahk_class TTOTAL_CMD
  }
}
else
{
  MsgBox, cannot start TC, may be TC is not installed
}
return
durch die Aufruf Parameter werden die Cursor in den beiden Panels auf die übergeben Files gesetzt.
Mit <Tab> <Space> <Tab> <Space> werden sie markiert, bevor das Vergleichskommando dann aufgerufen wird.

Man kann auch den Parameter /N schlichtweg weglassen. Das geht dann aber evtl. schief, wenn ein bereits gestarteter TC, einen modalen Dialog anzeigen würde.

Aber du hast schon recht, es ist eigentlich Overkill den TC nur als Dateivergleicher zu benutzten. :wink:

Mit freundlichem Gruß,
Holger
TWatcher
Junior Member
Junior Member
Posts: 43
Joined: 2008-08-26, 18:46 UTC

Post by *TWatcher »

Hallo HolgerK,
Kleiner Verbesserungsvorschlag ....
Ersetzte: Code: send !v
durch Code: send {Enter}
akzeptiert :oops:
Oha, da fühle ich mich jetzt herausgefordert...
Auf Kosten der Wiederverwertung einer bestehenden TC-Instanz könnte man das in etwa so machen: ....
Hatte ich auch probiert, aber in der TC Hilfe heißt es:
/L= Setze Pfad des linken Fensters
/R= Setze Pfad des rechten Fensters.
Damit nahm ich an, dass ein automatisches File selektieren nicht möglich wäre... :roll:

Hinweis: Dein Script verträgt sich nicht mit dem fhRAR-Plugin. Es kommt Fehlermeldung: "Not a valid RAR archive!"
Ich denke das ist aber ein Problem vom fhRAR Plugin, wenn ich das Plugin deaktiviere, funktioniert dein Script :D
Bis dann
CSL
Senior Member
Senior Member
Posts: 286
Joined: 2007-12-05, 07:19 UTC
Location: Karlsruhe
Contact:

Post by *CSL »

in der IT sagt man ja
"Path" - das steht fuer verzeichnis + dateinamen
ich vermute das wurde einfach nach pfad uebersetzt
wenn man nur vom verzeichnis spricht sagt mal "Folder" oder "Directory" welches in der uebersetzung "Ordner" oder "Verzeichnis" bedeutet
User avatar
HolgerK
Power Member
Power Member
Posts: 5406
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Post by *HolgerK »

Kombiniere:
Weg = "Pfad, schmaler Weg: ein gewundener, ebener, schwieriger P.; ein feuchter, steiniger P. schlängelt sich durch die Felder,.."
mit:
"Der Weg ist das Ziel!"

und du erhälst eine Beschreibung wie du etwas findest, wenn du dem Pfad folgst.
Dabei ist es egal ob das Ziel eine Datei oder ein Verzeichnis ist. :wink:

Gruß,
Holger
TWatcher
Junior Member
Junior Member
Posts: 43
Joined: 2008-08-26, 18:46 UTC

Post by *TWatcher »

Na da hab ich wohl eine philosophische Diskussion auf den Weg gebracht :wink:

Hauptsache ist jedoch: Wir lassen uns nicht vom Pfad der Tugend (= path of virtue ?) abbringen... :lol:
Bis dann
Post Reply