Verhalten von DIRCHANGE()

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
IngoM
UDF-Programmierer
UDF-Programmierer
Beiträge: 51
Registriert: Di, 09. Jul 2013 9:23

Verhalten von DIRCHANGE()

Beitrag von IngoM »

Hallo,

ich möchte eine kleine Routine haben, die ein Verzeichnis anlegt und dann dort hinein wechselt.
Diese Routine wird als alleinstehende EXE genutzt und besteht nur aus:

DIRMAKE ("TEST") -> erzeugt Verzeichnis TEST
DIRCHANGE ("TEST") -> wechselt in Verzeichnis TEST
? DIRNAME () -> gibt auch \TEST aus
RETURN

Nach dem RETURN bin ich nicht in TEST, sondern wieder im Verzeichnis des Programmaufrufs; ich möchte aber im Verzeichnis TEST stehen.
Kann mir das jemand erklären? Was muss ich ändern?

Viele Grüße
Ingo
Viele Grüße
Ingo
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Re: Verhalten von DIRCHANGE()

Beitrag von mini990 »

Dirchange("\Test")

Der Backslash machts.... :-)

Gruß Stefan
IngoM
UDF-Programmierer
UDF-Programmierer
Beiträge: 51
Registriert: Di, 09. Jul 2013 9:23

Re: Verhalten von DIRCHANGE()

Beitrag von IngoM »

Danke für die schnelle Antwort, scheint aber nicht zu helfen.
DIRMAKE und DIRCHANGE funktionieren; mein Problem ist, dass ich am Ende des Programmes nicht im Verzeichnis TEST bin.

Viele Grüße
Ingo
Viele Grüße
Ingo
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Verhalten von DIRCHANGE()

Beitrag von Martin Altmann »

Warum solltest Du auch? Der Wechsel gilt ja auch nur im Kontext des laufenden Programms!
Bau Dir eine Batch, die das mit den entsprechenden OS-Kommandos erledigt.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
IngoM
UDF-Programmierer
UDF-Programmierer
Beiträge: 51
Registriert: Di, 09. Jul 2013 9:23

Re: Verhalten von DIRCHANGE()

Beitrag von IngoM »

Das Beispiel ist natürlich vereinfacht, der Name des Verzeichnisses wird errechnet; das in einer Batch zu machen ist mir zu kompliziert.
Interessant ist aber, dass das Verhalten unter Clipper anders war.
Gibt es vielleicht eine Möglichkeit, unter XBase den "Focus" oder wie auch immer man das nennt, ebenso zu verstellen?
Es würde mich wundern, wenn so etwas triviales nicht möglich sein sollte.

Viele Grüße
Ingo
Viele Grüße
Ingo
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Verhalten von DIRCHANGE()

Beitrag von Martin Altmann »

Versuche doch, zumindest das Dirchange als Aufruf des OS-Kommandos cd mittels runshell zu erreichen. Vielleicht hilft das?

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Verhalten von DIRCHANGE()

Beitrag von brandelh »

Der Aufruf eines Programmes ändert normalerweise nichts gegenüber den anderen, das war unter DOS anders, da es nur ein Programm gab.
Wenn du eine CMD in einem speziellen Verzeichnis öffnen willst, dann kann man runshell nutzen oder eine EXE in einer CMD, die die CMD selbst ändert, so haben wir früher Menüs gemacht.
Aber nach dem ENDE der CMD gibt es kein Standardverzeichnis.
Gruß
Hubert
IngoM
UDF-Programmierer
UDF-Programmierer
Beiträge: 51
Registriert: Di, 09. Jul 2013 9:23

Re: Verhalten von DIRCHANGE()

Beitrag von IngoM »

Ich möchte lediglich ein XBase-Programm haben, dass ein Verzeichnis erzeugt, dort hinein wechselt und sich dann beendet.
Dann geht es mit einem anderen Programm dort weiter.
Das lässt sich nicht realisieren? Hat dafür jemand eine Idee?

Viele Grüße
Ingo
Viele Grüße
Ingo
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Verhalten von DIRCHANGE()

Beitrag von Herbert »

Warum ein Xbase-Programm für sowas machen, wenn dies elegant mit einer .cmd-Datei erledigt werden kann?
Grüsse Herbert
Immer in Bewegung...
IngoM
UDF-Programmierer
UDF-Programmierer
Beiträge: 51
Registriert: Di, 09. Jul 2013 9:23

Re: Verhalten von DIRCHANGE()

Beitrag von IngoM »

... weil ich dieses einfache Tool seit 1993 benutze und besser mit Cli** als mit OS-Kommandos zum Ziel gekommen bin.
Jetzt wechsele ich auf ein 64bit Windows, brauche also mindestens 32bit Code. Also sollte mir XBase helfen können.

Gibt es hierfür keine Lösung?
Viele Grüße
Ingo
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2824
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Verhalten von DIRCHANGE()

Beitrag von georg »

Hallo, IngoM -


das Problem liegt eher im Ansatz.

Wie linkst Du das Programm?

Wenn es ein GUI-Programm ist, wird cmd.exe das Programm "launchen", und es läuft selbständig und kann in dem cmd.exe-Prozess nichts mehr ändern.

Alternativ könntest Du am Ende des Programms eine Instanz von cmd.exe starten, die sollte dann das "richtige" Verzeichnis verwenden.

Ausprobiert habe ich es allerdings noch nicht.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Verhalten von DIRCHANGE()

Beitrag von Herbert »

IngoM hat geschrieben:... weil ich dieses einfache Tool seit 1993 benutze und besser mit Cli** als mit OS-Kommandos zum Ziel gekommen bin.
Jetzt wechsele ich auf ein 64bit Windows, brauche also mindestens 32bit Code. Also sollte mir XBase helfen können.
Warum denn? Deine Anliegen haben nichts mit der Art des Betriebssystgems zu tun. Du willst du ein Verzeichnis erstellen und dort hineinwechseln, und das in einem CMD-Fenster (egal welches Betriebssystem dahinter steht) dann als aktives Verzeichnis anzeigen. Was soll denn nachher dort geschehen?
Normalerweise arbeitet ein GUI auch im GUI weiter und verwaltet entsprechend die Verzeichnisse. Daher macht doch dies auf diese Weise keinen Sinn.
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Verhalten von DIRCHANGE()

Beitrag von AUGE_OHR »

IngoM hat geschrieben:... weil ich dieses einfache Tool seit 1993 benutze und besser mit Cli** als mit OS-Kommandos zum Ziel gekommen bin.
Jetzt wechsele ich auf ein 64bit Windows, brauche also mindestens 32bit Code. Also sollte mir XBase helfen können.
ja ja ... solche Probleme kenne ich ... 16bit Programme laufen da nicht mehr ;)

"Verzeichniswechsel" mache das mit diesen beiden Dateien
BACKHOME.ZIP
(286 Bytes) 212-mal heruntergeladen
dabei muss das Verzeichnis "C:\DOS\BAT" (kann man ändern) natürlich im PATH sein damit es eine Datei BACK.BAT erzeugt

---

scheinbar kann man wirklich nicht mit einer Xbase++ Applikation ein Verzeichnis, nach beenden des Programms, "direkt" wechseln ...

ein Xbase++ Programm kann einen ErrorLevel ausgeben den man, nach verlassen des Programm, auswerten könnte

Code: Alles auswählen

myXbase.EXE %1
IF ERRORLEVEL 99
    Call Wechsel.BAT
ENDIF
die Wechsel.BAT "schreibst" du nun aus deinem MyXbase.EXE

---

eine grundsätzliche Lösung wäre evtl. ein Eintrag in das Explorer-Menu "CMD here" was so aussehen könnte

Code: Alles auswählen

REGEDIT4

[HKEY_CLASSES_ROOT\*\shell\cmdhere]
@="Cmd&Here"

[HKEY_CLASSES_ROOT\*\shell\cmdhere\command]
@="cmd.exe /c start cmd.exe /k pushd \"%L\\..\""

[HKEY_CLASSES_ROOT\Folder\shell\cmdhere]
@="Cmd&Here"

[HKEY_CLASSES_ROOT\Folder\shell\cmdhere\command]
@="cmd.exe /c start cmd.exe /k pushd \"%L\""
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Verhalten von DIRCHANGE()

Beitrag von brandelh »

Wenn du zuerst ein CMD Fenster öffnest, darin die EXE startest, dann könnte es sein dass ein Verzeichniswechsel erhalten bleibt, das habe ich noch nie probiert.
Was auf jeden Fall geht, ist eine CMD bauen, die eine EXE Aufruft, diese EXE überschreibt die aktuelle CMD ! und nach dem Wechsel werden die Befehle ausgeführt die die EXE eingebaut hat.

Du hast abe noch nicht erklärt, ob du das z.B. aus dem Explorer aufrufen willst und ob du danach in der CMD Box stehen willst.
Beispiel, menu.CMD, dieser kann man im LINK ein Arbeitsverzeichnis zuordnen, man könnte dieses aber auch am Anfang einstellen (sicherer).
Man sollte alle Pfade komplett ausschreiben, weil man sonst auf die Umgegungsvariablen angewiesen ist.

Code: Alles auswählen

@echo off
:start
cls
c:\batch\menu.EXE      <= diese EXE lädt die Menu.CMD und schreibt diese neu, bis zu dieser ZEILE muss alles identisch bleiben !!!
REM ab hier werden die Befehle von Menu.EXE eingefügt
c:
cd c:\NormalesEnde
start /C cmd.exe    <= wenn aus dem Explorer gestartet könnte man so eventuell ein neues CMD Fenster aus diesem Verzeichnis starten ??? /C eventuell weg lassen ???
menu.EXE lädt nun die CMD ändert was man will, solange die Änderunge HINTER dem eigenen Aufruf liegt UND die Zeilenzahl bis zu diesem nicht geändert wurde ... geht das gut.
Menu.EXE schreibt die menu.CMD und wartet mindestens 1/10 Sekunde für die caches ... z.B. wird die menu.CMD nun so aussehen ...

Code: Alles auswählen

@echo off
:start
cls
c:\batch\menu.EXE      <= diese EXE lädt die Menu.CMD und schreibt diese neu, bis zu dieser ZEILE muss alles identisch bleiben !!!
REM ab hier werden die Befehle von Menu.EXE eingefügt
D:
cd D:\Hier\will\ichhin
wenn man schon in einer CMD ist und diese nicht verläßt, braucht man keinen START Befehl, ansonsten diesen noch einsetzen.
Man muss die menu.CMD nicht wirklich einlesen, man kann sie mit gleichen Kopf einfach neu erzeugen, ansonsten gibt es in der Wissensdatenbank von mir Funktionen die eine solche in eine Array einlesen und auch einfach wieder schreiben.
Gruß
Hubert
IngoM
UDF-Programmierer
UDF-Programmierer
Beiträge: 51
Registriert: Di, 09. Jul 2013 9:23

Re: Verhalten von DIRCHANGE()

Beitrag von IngoM »

Hallo Zusammen.

Vielen Dank für eure Hilfeversuche; es scheint hier wirklich einen prinzipiellen Unterschied zu geben.
Ich habe auch nicht gedacht, dass die paar Zeilen Programm soviel Fragen aufwerfen können.
Die Lösungsansätze sind mir zu aufwendig; ich werde dann doch auf Batch-Programmierung ausweichen.

Vielen dank noch einmal und ein schönes Wochenende
Ingo
Viele Grüße
Ingo
Antworten