im Total Commander kann man sehr schön den Pfad zu einer Datei oder einem Ordner in die Zwischenablage kopieren. Das klappt auch hervorragend.
Was mir nicht so gut gefällt, ist der andere Weg, nämlich das Aufsuchen eines Pfades, der als Text vorliegt. Häufig arbeite ich mit Pfaden, die ich in Textform erhalte, sei es aus einem Anwenderticket oder als Ergebnis aus einem Script. Da es sich dabei um viele Pfade handelt, die ich aufsuchen muss, bin ich natürlich an einer einfachen Lösung interessiert.
Der offizielle Weg dazu ist, entweder die Befehlszeile aufzumachen und "cd <pfad>" einzugeben oder über der Dateiliste auf den Pfad zu klicken und dort dann mit Strg-V + Enter den Pfad einzufügen und aufzusuchen. Kann man so machen, ist aber im Verhältnis zu einem einfachen Einfügen des Pfades mittels Strg-V doch umständlich. Vor allem, wenn man es mit dreihundert Pfaden zu tun hat...

Daher folgender Wunsch: Der Total Commander könnte, wenn ein Anwender Strg-V drückt, anhand des Inhaltes der Zwischenablage entscheiden, was zu tun ist.
1. Ist ein Text in der Zwischenablage und der Text bildet einen Pfad, dann versuche, dort hin zu gehen.
2. Handelt es sich jedoch bei dem Inhalt der Zwischenablage um eine Dateiliste, dann füge die Dateien wie bisher in das aktuelle Verzeichnis ein
3. gerne zusätzlich: ist ein Bild in der Zwischenablage, öffne es im Lister
Mein bisheriger Workaround:
Im TC-Verzeichnis unter \plugins\ahk\ liegt ein script "gehezu.ahk" und ein autohotkey.exe
In der usercmd.ini habe ich das Teil entsprechend verknüpft:
Code: Select all
[em_GeheZu]
cmd=%Commander_Path%\Plugins\ahk\autohotkey.exe "%Commander_Path%\Plugins\ahk\gehezu.ahk"
Hier das passende Autohotkey-Script:
Code: Select all
IfNotExist, %clipboard% { exit }
IfWinActive, ahk_class TTOTAL_CMD ; nur, wenn der TC auch aktiv ist
{
if DllCall("IsClipboardFormatAvailable", "uint", 1) ; Clipboard enthält Text => Pfad wechseln
{
cm_EditPath := 2912
SendMessage 1075, %cm_EditPath%, 0
if ErrorLevel <> FAIL
Send ^v{Enter}
}
else if DllCall("IsClipboardFormatAvailable", "uint", 15) ; Clipboard enthält eine Dateiliste => reinkopieren der Dateien in akt. Verzeichnis
{
cm_PasteFromClipboard := 2009
SendMessage 1075, %cm_PasteFromClipboard%, 0
}
return
}

Update 2020-04-15:
Hui, das Script wurde in eine Thread-Sammlung mitaufgenommen. Zur Feier dessen hier noch die tiefergelegte Fassung, die auch eingefügte Bilder als png im Dokumente-Ordner speichert und noch ein paar Verbesserungen hat:
Code: Select all
#Include %A_ScriptDir%
#Include Gdip_all.ahk
IfNotExist, %clipboard% { exit }
IfWinActive, ahk_class TTOTAL_CMD ; nur, wenn der TC auch aktiv ist
{
if DllCall("IsClipboardFormatAvailable", "uint", 1) ; Clipboard enthält Text => Pfad wechseln, wenn möglich
{
tmp := StrReplace(Clipboard, "`r") ; entferne alle Zeilenumbrüch,sofern vorhanden
tmp := StrReplace(tmp, "`n") ; entferne Zeilenvorschübe,sofern vorhanden
tmp := StrReplace(tmp, """") ; entferne doppelte Anführungszeichen,sofern vorhanden
tmp := Trim(tmp) ; entferne Leerzeichen an Anfang und Ende, so vorhanden
clipboard := tmp ; so oder so schreiben wir den bereinigten Text wieder zurück ins Clipboard
tmp1 := SubStr(tmp, 2,2) ; prüfe auf Laufwerksbuchstaben
tmp2 := SubStr(tmp,1,2) ; prüfe auf UNC Pfad
if (tmp1 = ":\" or tmp2 = "\\" ) ; nur, wenn es ein voller Dateipfad mit Laufwerksbuchstabe oder ein UNC Pfad ist
{
if FileExist(tmp) ; nur, wenn der Text einen existierenden Pfad darstellt
{
cm_EditPath := 2912
SendMessage 1075, %cm_EditPath%, 0
if ErrorLevel <> FAIL
Send ^v {Enter}
}
}
else ; Clipbboard ist ein Text, aber kein gültiger Pfad => filtere Dateiliste
{
Send %clipboard%
}
}
else if DllCall("IsClipboardFormatAvailable", "uint", 15) ; Clipboard enthält eine Dateiliste => reinkopieren der Dateien in akt. Verzeichnis
{
cm_PasteFromClipboard := 2009
SendMessage 1075, %cm_PasteFromClipboard%, 0
}
else if DllCall("IsClipboardFormatAvailable", "uint", 2) ; Clipboard enthält ein Bild => Speichern
{
pToken := Gdip_Startup()
pBitmap := Gdip_CreateBitmapFromClipboard()
if (pBitmap > 0)
{
vPath := A_MyDocuments "\Bild " A_YEAR "-" A_MM "-" A_DD ".png"
Gdip_SaveBitmapToFile(pBitmap, vPath)
}
DllCall("CloseClipboard")
Gdip_Shutdown(pToken)
}
return
}
Liebe Grüße
Marc