Skript zum Verzeichniswechsel
Moderators: Hacker, Stefan2, white
Skript zum Verzeichniswechsel
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
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
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
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
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64
Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
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
Gruß,
Jesco
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.
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)
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)
Re: Skript zum Verzeichniswechsel
Jesco wrote:Ich dachte an ein Skript, das Quelle ("D:") und Ziel ("E:\allProjects") übergeben bekommt und entsprechend das aktuelle Verzeichnis wechselt.
- Markieren und in Clipboard übernehmen;cdSyncFolder.bat wrote:set _t=%1
set _t=%_t:~3,255%
%COMMANDER_PATH%\totalcmd.exe /O /S /R="%2\%_t%"
- 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
- 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
Genau das sollte hiermit funktionieren.Ziel ist es aus einem beliebigen Ordner (ggf. sehr tief in der Verzeichnishierarchie) schnell in die andere Verzeichnishierarchie zu springen.
Nur für den Fall das du mein Posting um knapp 30 Sekunden verpasst/übersehen hast.
Gruß
Holger
@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 erklären, bin in der Batch-Programmierung nicht so bewandert.
Danke und Gruß,
Jesco
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%
Danke und Gruß,
Jesco
Der Script würde versuche nach "D:\Temp\2\Temp\1\dat" zu wechseln.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"
Was deinem Beispiel:
entsprechen sollte.D:\projekt1\data\list1\
zu wechseln nach:
E:\allProjects\projekt1\data\list1\
String manipulation in Batches->Mid String - Extract a Substring by PositionKönntest du dir bitte die Mühe machen und die Zeileerklären, bin in der Batch-Programmierung nicht so bewandert.Code: Select all
set _t=%_t:~3,255%
Grob zusammengefasst: es wird der Teilstring ab der 3 Position bis zum Ende rausgepickt:
D:\Temp\1\dat\ -> Temp\1\dat\
Gruß
Holger
Jetzt verstehe ich das Skript.
Damit das ganze mit Leerzeichen im Pfad funktioniert muss man offenbar schreiben:
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.
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%""
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.
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.
Das sollte etwaige Probleme mit Leerzeichen vorbeugen. Allerdings darauf achten, dass alle Parameter im Button mit "" eingerahmt sind.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%"
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
Nein, das geht nicht so ohne weiteres.besteht die Möglichkeit vom Skript zum Schluss ein TotalCmd-internes Kommando abzusetzen?
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.
@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

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
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64
Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
Ja, sieht schöner aus.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%"
Danke für den Tip.
Erwünschte Anführungszeichen sollte es in Windowspfaden allerdings nicht geben.

Gruß
Holger