Skript zum Verzeichniswechsel

German support forum

Moderators: Hacker, Stefan2, white

Post Reply
Jesco
Junior Member
Junior Member
Posts: 65
Joined: 2003-12-05, 17:28 UTC

Skript zum Verzeichniswechsel

Post by *Jesco »

Hallo,

ich habe auf zwei Festplatten je eine identisch aufgebaute Verzeichnisstruktur und suche nach einer Möglichkeit schnell von der einen in die jeweils andere zu wechseln. Z.B. aus dem Ordner
D:\projekt1\data\list1\
zu wechseln nach:
E:\allProjects\projekt1\data\list1\

Ich dachte an ein Skript, das Quelle ("D:\") und Ziel ("E:\allProjects\") übergeben bekommt und entsprechend das aktuelle Verzeichnis wechselt. Man könnte dann zwei Button mit den entsprechenden Parametern einrichten. Das Skript sollte möglichst per VBScript (oder ggf. Batch) realisiert sein (jedenfalls keine zusätzliche Installation benötigen wie AutoHotkey). Können externe Skripte ein Total Commander-Verzeichnis wechseln?

Gruß,
Jesco
User avatar
Dalai
Power Member
Power Member
Posts: 9994
Joined: 2005-01-28, 22:17 UTC
Location: Meiningen (Südthüringen)

Post by *Dalai »

Wie wär's mit cm_SyncChangeDir auf einem Button der Symbolleiste oder im Menü des TC? Voraussetzung dafür ist natürlich eine identische Verzeichnisstruktur auf beiden Laufwerken.

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
Jesco
Junior Member
Junior Member
Posts: 65
Joined: 2003-12-05, 17:28 UTC

Post by *Jesco »

Den Befehl cm_SyncChangeDir nutze ich bereits manchmal, hier geht es mir aber darum erst mal rechts und links das richtige Verzeichnis anzuzeigen. Z.Zt. kopiere ich i.d.R. den aktuellen Pfad in die Kommandozeile und editiere den Anfang (mit einem cd-Befehl davor), das würde ich gerne vereinfachen.

Gruß,
Jesco
User avatar
Krokus
Member
Member
Posts: 140
Joined: 2009-03-25, 17:51 UTC
Location: Germany

Post by *Krokus »

Erstelle Dir im Startermenü einen Eintrag mit angepaßtem Pfad, entsprechend Deiner TC-Installation:
C:\Programme\TC\totalcmd.exe /O /L=D:\projekt1\data\list1\ /R=E:\allProjects\projekt1\data\list1\
Häufig gebrauchte Verzeichnisse, erreiche ich schnell über anklicken meiner Tableisten.
#133258 Personal license
TC 7.04a & TC 7.50 > TC 7.50a + TC 7.56a > 7.57 > 8.01 > 8.50 > 8.52a
Windows XP SP3 & Windows 7 HP (32 bit) & Windows 8 (64 bit)
--
und auch aktuelle TC-U3-Version mit Windows XP & Windows 7 HP & Windows 8 (64 bit)
User avatar
HolgerK
Power Member
Power Member
Posts: 5411
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Re: Skript zum Verzeichniswechsel

Post by *HolgerK »

Jesco wrote:Ich dachte an ein Skript, das Quelle ("D:") und Ziel ("E:\allProjects") übergeben bekommt und entsprechend das aktuelle Verzeichnis wechselt.
cdSyncFolder.bat wrote:set _t=%1
set _t=%_t:~3,255%
%COMMANDER_PATH%\totalcmd.exe /O /S /R="%2\%_t%"
- Markieren und in Clipboard übernehmen;
- In einem Texteditor einfügen
- und in einem Unterverzeichnis Scripts des Total Commander Programmverzeichnisses als cdSyncFolder.bat abspeichern.

Button dazu:

Code: Select all

TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Scripts\CDSyncFolder.bat
"%P" "E:\allProjects"
WCMICONS.DLL,75
CDSyncFolder
%COMMANDER_PATH%\Scripts\
1
-1
- Markieren und ins Clipboard übernehmen
- Auf einer leeren Stelle der TC-Buttonbar das Kontextmenü aufrufen
- "Einfügen" auswählen

Beim Betätigen des Buttons wird das Zielverzeichnis des TC auf das entsprechende Unterverzeichnis des Quellverzeichnisses in "E:\allProjects" gesetzt.

Gruß
Holger
Jesco
Junior Member
Junior Member
Posts: 65
Joined: 2003-12-05, 17:28 UTC

Post by *Jesco »

@Krokus:
Häufig verwendete Verzeichnisse lade ich lieber über den opentabs-Befehl.

Aber das hilft hier nicht weiter: Ziel ist es aus einem beliebigen Ordner (ggf. sehr tief in der Verzeichnishierarchie) schnell in die andere Verzeichnishierarchie zu springen.

Gruß,
Jesco
User avatar
HolgerK
Power Member
Power Member
Posts: 5411
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Post by *HolgerK »

Ziel ist es aus einem beliebigen Ordner (ggf. sehr tief in der Verzeichnishierarchie) schnell in die andere Verzeichnishierarchie zu springen.
Genau das sollte hiermit funktionieren.
Nur für den Fall das du mein Posting um knapp 30 Sekunden verpasst/übersehen hast.

Gruß
Holger
Jesco
Junior Member
Junior Member
Posts: 65
Joined: 2003-12-05, 17:28 UTC

Post by *Jesco »

@HolgerK
Habe es nicht übersehen, aber brauchte etwas Zeit zum testen :)

Danke für den Code, es funktioniert bei mir noch nicht ganz so wie ich es erwarte: habe zwei Ordner angelegt:
D:\Temp\1\dat\
D:\Temp\2\dat\
Als Parameter für den Button habe ich angegeben:
"%P" "D:\Temp\2\"

Wenn ich im Verzeichnis 'D:\Temp\1\dat\' bin und den Button klicke möchte ich ins Verzeichnis 'D:\Temp\2\dat\', lande z.Zt. aber in 'D:\Temp\2\'

Könntest du dir bitte die Mühe machen und die Zeile

Code: Select all

set _t=%_t:~3,255%
erklären, bin in der Batch-Programmierung nicht so bewandert.

Danke und Gruß,
Jesco
User avatar
HolgerK
Power Member
Power Member
Posts: 5411
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Post by *HolgerK »

Jesco wrote:Danke für den Code, es funktioniert bei mir noch nicht ganz so wie ich es erwarte: habe zwei Ordner angelegt:
D:\Temp\1\dat\
D:\Temp\2\dat\
Als Parameter für den Button habe ich angegeben:
"%P" "D:\Temp\2"
Der Script würde versuche nach "D:\Temp\2\Temp\1\dat" zu wechseln.
Was deinem Beispiel:
D:\projekt1\data\list1\
zu wechseln nach:
E:\allProjects\projekt1\data\list1\
entsprechen sollte.
Könntest du dir bitte die Mühe machen und die Zeile

Code: Select all

set _t=%_t:~3,255%
erklären, bin in der Batch-Programmierung nicht so bewandert.
String manipulation in Batches->Mid String - Extract a Substring by Position
Grob zusammengefasst: es wird der Teilstring ab der 3 Position bis zum Ende rausgepickt:
D:\Temp\1\dat\ -> Temp\1\dat\

Gruß
Holger
Jesco
Junior Member
Junior Member
Posts: 65
Joined: 2003-12-05, 17:28 UTC

Post by *Jesco »

Jetzt verstehe ich das Skript.

Damit das ganze mit Leerzeichen im Pfad funktioniert muss man offenbar schreiben:

Code: Select all

set _t=%1
set _t=%_t:~3,255%
%COMMANDER_PATH%\totalcmd.exe /O /S /R=""%2\%_t%""
Soweit funktioniert das ganze jetzt auch. Noch nicht ganz so elegant ist, dass die Länge der Quelle "D:\" fest im Skript einprogrammiert ist. Besser wäre es, wenn dem Skript auch der Quellpfad übergeben würde: es sollte dann automatisch überprüfen ob der aktuelle Pfad mit diesem Quellpfad beginnt und dann entsprechend wechseln.

Noch eine Frage: besteht die Möglichkeit vom Skript zum Schluss ein TotalCmd-internes Kommando abzusetzen? Hier würde ich 'cm_SyncChangeDir' ausführen wollen.
User avatar
HolgerK
Power Member
Power Member
Posts: 5411
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Post by *HolgerK »

Besser wäre es, wenn dem Skript auch der Quellpfad übergeben würde: es sollte dann automatisch überprüfen ob der aktuelle Pfad mit diesem Quellpfad beginnt und dann entsprechend wechseln.
CDSyncFolder[color=red]2[/color].bat wrote:set _p1=%1
set _p1=%_p1:"=%
set _p2=%2
set _p2=%_p2:"=%
set _p3=%3
set _p3=%_p3:"=%
call set _t=%%_p1:%_p2%=%%
set _z=%_p3%\%_t%
if exist "%_z%" %COMMANDER_PATH%\totalcmd.exe /O /S /R="%_z%"
Das sollte etwaige Probleme mit Leerzeichen vorbeugen. Allerdings darauf achten, dass alle Parameter im Button mit "" eingerahmt sind.
Die ersten 6 Zeilen machen nichts anderes als die "" wieder zu entfernen.
Danach wird der 2. Übergabeparameter aus dem aktuellen Quellpfad (1. Parameter) entfernt (Stringersetzung mit Leerstring), und der Zielpfad aus dem 3. Parameter und dem Ergebnis der Ersetzung zusammengefügt.

Dazu gehörender Button:

Code: Select all

TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Scripts\CDSyncFolder2.bat
"%P" "D:"  "E:\allProjects"
WCMICONS.DLL,75
CDSyncFolder2
%COMMANDER_PATH%\Scripts\
1
-1
besteht die Möglichkeit vom Skript zum Schluss ein TotalCmd-internes Kommando abzusetzen?
Nein, das geht nicht so ohne weiteres.
Aber schau dir mal Samuel's ButtonBar eXtended an. Damit sollte man mehrere Kommandos nacheinander ausführen können.

Gruß
Holger

Edith sagt man soll Tippfehler nicht ständig ignorieren.
Last edited by HolgerK on 2010-09-09, 08:28 UTC, edited 1 time in total.
User avatar
Dalai
Power Member
Power Member
Posts: 9994
Joined: 2005-01-28, 22:17 UTC
Location: Meiningen (Südthüringen)

Post by *Dalai »

@HolgerK: Es gibt auch %~1, %~2 usw. Das entfernt ebenfalls die AFZ (Anführungszeichen) um die Variablen. Damit ließe sich dein Skript deutlich übersichtlicher gestalten ;) und vor allem werden keine erwünschten AFZ entfernt.

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

Post by *HolgerK »

CDSyncFolder[color=red]2[/color].bat wrote:set _p1=%~1
set _p2=%~2
set _p3=%~3
call set _t=%%_p1:%_p2%=%%
set _z=%_p3%\%_t%
if exist "%_z%" %COMMANDER_PATH%\totalcmd.exe /O /S /R="%_z%"
Ja, sieht schöner aus.
Danke für den Tip.
Erwünschte Anführungszeichen sollte es in Windowspfaden allerdings nicht geben.:wink:

Gruß
Holger
Jesco
Junior Member
Junior Member
Posts: 65
Joined: 2003-12-05, 17:28 UTC

Post by *Jesco »

Jetzt funktioniert es genau so, wie ich es mir vorgestellt habe. Vielen Dank für die Hilfe!

Dass 'cm_SyncChangeDir' nicht ausgeführt werden kann, ist nicht so tragisch, da ich dafür auch einen Shortcut definiert habe.

Gruß,
Jesco
Post Reply