Kommando zum Verzeichniswechsel

German support forum

Moderators: white, Hacker, Stefan2

chapolote
Junior Member
Junior Member
Posts: 15
Joined: 2009-11-06, 17:49 UTC

Kommando zum Verzeichniswechsel

Post by *chapolote »

Hallo,

ich habe folgende Situation:

ich arbeite mit Arbeitsdateien aus denen ich pdf generiere. Beide Dateien liegen im selben Stammverzeichnis, aber in verschiedenen Ordnern, also Beispielsweise die Arbeitsdatei in:

Stammverzeichnis/Arbeitsverzeichnis/Projekt/Unterprojekt/Datei.xyz und das Pdf Verzeichniss unter:

Stammverzeichnis/PDFVerzeichnis/Projekt/Unterprojekt/Datei.pdf

Diese Struktur ist immer gleich, alles was sich ändert ist die Verzeichnistiefe unterhalb Arbeitsverzeichnis/PDFVerzeichnis

Wenn ich jetzt zwischen beiden Pfaden wechseln möchte, hab ich, je nach Verzeichnistiefe eine endlose Klickerei und suche deshalb nach einem Tool/Kommando, mit dem ich folgendes erreichen kann:

-ermittle mir den Verzeichnispfad der Arbeitsdatei
-ersetze in diesem Pfad den Teil "Arbeitsverzeichnis" durch "PDFVerzeichniss"
-öffne mir diesen Ordner

Geht sowas, oder kennt jemand vielleicht ein Tool, welches sowas kann?

Grüße, chapolote
User avatar
ghisler(Author)
Site Admin
Site Admin
Posts: 48088
Joined: 2003-02-04, 09:46 UTC
Location: Switzerland
Contact:

Re: Kommando zum Verzeichniswechsel

Post by *ghisler(Author) »

Das geht mit einem Button, Startmenüeintrag oder internem Befehl:
Befehl: cd
Parameter: Stammverzeichnis/PDFVerzeichnis\%P:~xy,1000
wobei xy ersetzt werden muss durch die Länge des Arbeitsverzeichnispfades.
Wenn Sie an den Anfang von Parameter ein ? stellen, zeigt TC den erzeugten Zielpfad an.
Author of Total Commander
https://www.ghisler.com
User avatar
ZoSTeR
Power Member
Power Member
Posts: 1013
Joined: 2004-07-29, 11:00 UTC

Re: Kommando zum Verzeichniswechsel

Post by *ZoSTeR »

 
Vielleicht ein wenig universeller und ohne das Abzählen der Verzeichnislänge:

Befehl: cd
Parameter:

Code: Select all

%B+0:\%B+1\%B+2\%B+3\PDFVerzeichnis\%B+5\%B+6\%B+7\%B+8\%B+9
Dh: Sämtliche Verzeichnisse im Pfad werden beibehalten, nur das "PDFVerzeichnis" muss auf der richtigen Ebene eingetragen werden.
Die Verzeichnistiefe darf bis zu neun Ebenen haben, nicht vorhandene werden ignoriert.

Dies kann man natürlich noch mit anderen Kommandozeilenparametern des TCs kombinieren, zB öffnen als neuer Tab im Zielfenster:

Befehl:

Code: Select all

%COMMANDER_EXE%
Parameter:

Code: Select all

/O /S /T /R=%B+0:\%B+1\%B+2\%B+3\PDFVerzeichnis\%B+5\%B+6\%B+7\%B+8\%B+9
chapolote
Junior Member
Junior Member
Posts: 15
Joined: 2009-11-06, 17:49 UTC

Re: Kommando zum Verzeichniswechsel

Post by *chapolote »

Wow, das ist ja schon mal super. Ist einfacher, als ich dachte. Danke.

Zumindest was die Lösung von ZoSTeR betrifft. Mit der Lösung von ghisler komm ich leider nicht zurück, da erhalte ich dann Pfade wie Stammverzeichniss/PDFVerzeichnis\Unterverzeichnis. Das Unterverzeichnis existiert zwar im PDFVerzeichnis, aber wird nicht geöffnet.

Aber: ich hab in der Beschreibung einen Fehler gemacht, was das Ganze mit dem bisherigen Ansatz in meinem Fall nicht universel macht. Das lag daran, daß in meinem Kopf die Idee war, ich gehe vom Arbeitsverzeichniss zurück ins Stammverzeichnis und von da wieder runter ins PDFVerzeichnis, während der Lösungsvorschlag von ZoSTeR auf dem kompletten Pfad basiert.

Anders gesagt, die Verzeichnistiefe zum Arbeitsverzeichnis/PDFVerzeichniss ab Laufwerksebene ist unterschiedlich, ich müsste aber, falls es dafür eine ähnliche Vorgehensweise gäbe, mit dem Limit von 9 Ebenen im Normalfall hinkommen.

Eigentlich müsste es so sein, daß der komplette Pfad von Arbeitsverzeichniss benutzt wird, darin, ich sags mal salopp, nach Arbeitsverzeichniss gesucht wird und das ersetzt durch PDFVerzeichnis wird.

Sorry, daß ich die Problematik nicht richtig beschrieben habe...
User avatar
ZoSTeR
Power Member
Power Member
Posts: 1013
Joined: 2004-07-29, 11:00 UTC

Re: Kommando zum Verzeichniswechsel

Post by *ZoSTeR »

 
Dann muss man wohl doch auf Batch zurückgreifen.

Folgendes als "TC_CD_ArbeitPDF.cmd" oder ähnlich speichern:

Code: Select all

@echo off
set _Arbeitsverzeichnis=Mein Arbeitsverzeichnis
set _PDFverzeichnis=Mein PDF-Verzeichnis
set _quelle=%1
call set _ziel=%%_quelle:%_Arbeitsverzeichnis%=%_PDFverzeichnis%%%
"%COMMANDER_EXE%" /O /S /T /R=%_ziel%
Die beiden Variabeln _Arbeitsverzeichnis und _PDFverzeichnis entsprechend anpassen.
Die Commander Parameter anpassen nach Geschmack, zB neuer Tab, im Zielfenster öffnen, etc.

Neuen Button erstellen mit

Befehl:
~PfadZu~\TC_CD_ArbeitPDF.cmd

Parameter:
"%P"

"Als Symbol" anhaken

Zum Testen im Fehlerfalle:
"Als Symbol" aus
In der .cmd "@echo off" entfernen und am Ende ein "pause" anfügen.
Fla$her
Power Member
Power Member
Posts: 2318
Joined: 2020-01-18, 04:03 UTC

Re: Kommando zum Verzeichniswechsel

Post by *Fla$her »

2chapolote
Button:

Code: Select all

TOTALCMD#BAR#DATA
%ComSpec% /q/v/c set
"p=%P"&&"%|COMMANDER_EXE|" /O0 /S "!p:\Arbeitsverzeichnis\=\PDFVerzeichnis\!"
wcmicon2.dll,80
Ändern des aktuellen Ordners des aktiven Panels, indem man "\Arbeitsverzeichnis\" durch "\PDFVerzeichnis\" ersetzt

1
Overquoting is evil! 👎
chapolote
Junior Member
Junior Member
Posts: 15
Joined: 2009-11-06, 17:49 UTC

Re: Kommando zum Verzeichniswechsel

Post by *chapolote »

Danke für die Antworten.

Der Code von ZoSTeR funktioniert, super! 1000 Dank.

Der von Fla$her aber nicht, da bleibt der TC einfach im Arbeitsverzeichnis. Könnt das damit zu tun haben, daß in der Pfadangabe Ordner sind, die Leerzeichen beinhalten? Wenn ich nämlich bei ZoSTeR die Anführungszeichen bei Parameter weglasse, funktioniert der Code auch nicht und es wird mir das Mutterverzeichnis des ersten Ordners angezeigt, der eben ein Leerzeichen beinhaltet.

Grüße, Joe
Fla$her
Power Member
Power Member
Posts: 2318
Joined: 2020-01-18, 04:03 UTC

Re: Kommando zum Verzeichniswechsel

Post by *Fla$her »

chapolote wrote: 2024-01-28, 07:02 UTCKönnt das damit zu tun haben, daß in der Pfadangabe Ordner sind, die Leerzeichen beinhalten?
Nein, Leerzeichen sind kein Hindernis für den Code. Welche Version von TC haben Sie?
Overquoting is evil! 👎
chapolote
Junior Member
Junior Member
Posts: 15
Joined: 2009-11-06, 17:49 UTC

Re: Kommando zum Verzeichniswechsel

Post by *chapolote »

Die Version war es. Hatte noch eine 10.0 drauf, jetzt die aktuellste und dann funktioniert das auch.

Hab mal versucht, mich etwas in batch programmierung einzulesen, aber so recht verstehe ich das noch nicht.

Meine Idee wäre jetzt folgende gewesen, den Code vo ZoSTeR daraufhin zu erweitern, daß ich sozusagen switchen kann. Also eine If-Abfrage, und wenn ich im Ordner Arbeitsverzeichniss bin, den durch PDFVerzeichnis zu ersetzen, und wenn ich im PDFVerzeichnis bin, dann eben wieder zurück ins Arbeitsverzeichniss.
Da hapert es jetzt erst einmal primär daran, daß ich zwar haufenweise Beispiele finde, wie ich einen Teilstring in einer Datei finde, aber nichts darüber, wie ich einen Teilstring in einem String, hier also der Pfadangabe, finden kann.

Dürfte ich Euch dazu nochmal strapazieren, bitte?

Danke und Grüße, chapolote
User avatar
ZoSTeR
Power Member
Power Member
Posts: 1013
Joined: 2004-07-29, 11:00 UTC

Re: Kommando zum Verzeichniswechsel

Post by *ZoSTeR »

 
Batch ist wirklich keine dankbare "Sprache", würde auch lieber PowerShell nutzen, aber leider ist der Aufruf für solch kurze Geschichten zu mühsam und langsam.

Zum Wechsel:

Code: Select all

@echo off
SETLOCAL EnableDelayedExpansion
set _ADir=\Mein Arbeitsverzeichnis\
set _PDir=\Mein PDF-Verzeichnis\
set _quelle=%1
call set _test_A=%%_quelle:%_ADir%=xxx%%
call set _test_P=%%_quelle:%_PDir%=xxx%%

if not %_test_A%==%_quelle% (
	call set _ziel=%%_quelle:%_ADir%=%_PDir%%%
	"%COMMANDER_EXE%" /O /S /L=!_ziel!
) else (
	if not %_test_P%==%_quelle% (
		call set _ziel=%%_quelle:%_PDir%=%_ADir%%%
		"%COMMANDER_EXE%" /O /S /L=!_ziel!
	)
)
Um in Batch SubStrings abzufragen, muss man versuchen diese zu ersetzen (_test_A).
Wenn das Vergleichsergebnis ungleich ist, hat man einen Treffer.
Auch nervig in Batch: hier muss man DelayedExpansion aktivieren um später gesetzte Variabeln mit !var! abzufragen.
Fla$her
Power Member
Power Member
Posts: 2318
Joined: 2020-01-18, 04:03 UTC

Re: Kommando zum Verzeichniswechsel

Post by *Fla$her »

Code: Select all

@setlocal enabledelayedexpansion
@set "p=!cd!\"&set a=\Arbeitsverzeichnis\&set n=\PDFVerzeichnis\
@if /i "!p!"=="!p:%a%=!" (call set "p=%%p:!n!=!a!%%") else call set "p=%%p:!a!=!n!%%"
@"%COMMANDER_EXE%" /O0 /S "!p!"
In den Button-Einstellungen muss der Startpfad leer sein.
Overquoting is evil! 👎
chapolote
Junior Member
Junior Member
Posts: 15
Joined: 2009-11-06, 17:49 UTC

Re: Kommando zum Verzeichniswechsel

Post by *chapolote »

Herzlichsten Dank, so ist das perfekt. Und Dank auch für die verständnisvolle Antwort, was das Batch-Programmieren angeht ;)

@Fla$her: ich hab keine Idee, wo ich Deinen Code einfügen soll. Auch in eine cmd-Datei dieses Mal? Im TC-Dialog kann ich ja keine Mehrzeiler einfügen und ich vermute, Dein Code gehört doch grundsätzlich in die Kommando-Zeile, richtig?
Was ist eigentlich genau der Unterschied zwischen Deiner Version und der von ZoSTeR? Oder einfach nur ein anderes Vorgehen? Bei der ersten Version, dachte ich zumindest, ist es einfach, daß man ohne eine cmd-Datei auskommt,oder?

Grüße, chapolote
Fla$her
Power Member
Power Member
Posts: 2318
Joined: 2020-01-18, 04:03 UTC

Re: Kommando zum Verzeichniswechsel

Post by *Fla$her »

2chapolote
Aus Ihrer vorherigen Nachricht habe ich verstanden, dass Sie sich mit .bat befassen möchten, also habe ich ihn bereitgestellt. Der Ansatz ist ungefähr ähnlich, aber es gibt weniger Code. Ich schrieb ihn, bevor ich die vorherige Veröffentlichung sah.

Der Button ist sofort einsatzbereit, nachdem Sie die Batch-Datei auf den Buttonbar gezogen und den Startpfad in den Einstellungen gelöscht haben.
Overquoting is evil! 👎
chapolote
Junior Member
Junior Member
Posts: 15
Joined: 2009-11-06, 17:49 UTC

Re: Kommando zum Verzeichniswechsel

Post by *chapolote »

Fla$her wrote: 2024-01-28, 20:15 UTC 2chapolote
Aus Ihrer vorherigen Nachricht habe ich verstanden, dass Sie sich mit .bat befassen möchten, also habe ich ihn bereitgestellt. Der Ansatz ist ungefähr ähnlich, aber es gibt weniger Code. Ich schrieb ihn, bevor ich die vorherige Veröffentlichung sah.

Der Button ist sofort einsatzbereit, nachdem Sie die Batch-Datei auf den Buttonbar gezogen und den Startpfad in den Einstellungen gelöscht haben.
Naja, befassen vielleicht nicht wirklich, dazu fehlt mir leider die Zeit. Aber zumindest halbwegs nachvollziehen, was der Code macht. Ich finde mich so halbwegs in vba, php und javascript zurecht, aber .bat ist ja echt nicht schön zu lesen, geschweige denn, intuitiv zu verstehen. Hab mich aber, ehrlich gesagt, auch noch nicht wirklich mit den Basics vertraut gemacht.

Vielen herzlichen Dank für die bereitwillige, freundliche und flexible Hilfe an Euch beide!!!!
Fla$her
Power Member
Power Member
Posts: 2318
Joined: 2020-01-18, 04:03 UTC

Re: Kommando zum Verzeichniswechsel

Post by *Fla$her »

Bitte!
chapolote wrote: 2024-01-29, 06:17 UTC Ich finde mich so halbwegs in vba, php und javascript zurecht
In diesem Fall sollten Sie auch keine Probleme mit JScript/VBScript (ANSI) haben.
.js

Code: Select all

/*************************** JS **************************
 Zwischen zwei Teilen des Arbeitsverzeichnispfads wechseln

 Parameter: "%P" <Pfad Teil 1> <Pfad Teil 2>
 Beispil:   "%P" \Arbeitsverzeichnis\ \PDFVerzeichnis\
*********************************************************/
a = WSH.Arguments
if(a(0).indexOf(a(1))>-1){i = 1; n = 2} else {if(a(0).indexOf(a(2))>-1){i = 2; n = 1} else WSH.quit()}
WSH.CreateObject('WScript.Shell').exec('%COMMANDER_EXE% /O0 /S "' + a(0).replace(a(i), a(n)) + '"')
.vbs

Code: Select all

'—————————————————————————— VBS ———————————————————————————
' Zwischen zwei Teilen des Arbeitsverzeichnispfads wechseln
' Parameter: "%P" <Pfad Teil 1> <Pfad Teil 2>
'   Beispil: "%P" \Arbeitsverzeichnis\ \PDFVerzeichnis\
'——————————————————————————————————————————————————————————
Set A = WSH.Arguments
If InStr(1, A(0), A(1), 1) Then i = 1: n = 2 Else _
If InStr(1, A(0), A(2), 1) Then i = 2: n = 1 Else WSH.Quit
CreateObject("Wscript.Shell").Exec "%COMMANDER_EXE% /O0 /S """ & Replace(A(0), A(i), A(n)) & """"
Overquoting is evil! 👎
Post Reply