Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

habe Problem mit SHELL

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
kilix



Anmeldungsdatum: 05.02.2022
Beiträge: 175

BeitragVerfasst am: 12.12.2022, 21:05    Titel: habe Problem mit SHELL Antworten mit Zitat

Hallo, bin wieder einmal da.
Ich habe das folgende Problem:
ich will mit Shell ein Programm aufrufen dem als Parameter in der Befehlszeile eine Textdatei, die es ausdrucken soll, mitgegeben wird.
Die Verzeichnisstruktur sie so aus:
Freebasic und SVS sind Verzeichnisse in der Partition F: und QBDruck ist ein Unterverzeichnis von SVS
F: -|- Freebasic
. . .|- SVS\QBDruck
Mein Programm läuft im Verzeichnis \Freebasic, das Druckprogramm ist in \QBDruck gespeichert. Dort liegt auch die Textdatei Liste.txt. und die Logodatei WAPPEN.BMP die in der Textdatei referenziert wird.
Das ganze funktioniert einwandfrei wenn ich in der Console in das Verzeichnis \SVS\QBDruck gehe und dort das Druckprogramm wie folgt aufrufe:
rghlist.exe List.exe
Dazu muss ich mit cd\ von \Freebasic zurück auf F: gehen und von dort mit cd SVS\QBDruck in das Zielverzeichnis gehen.
Nachdem ich rghlist.exe aus einem FreeBasic-Programm aufrufen will habe nach einigen Versuchen dort den folgenden Befehl eingebaut
Code:
SHELL "cd .. && cd \SVS\QBDruck && rghlist.exe Liste.txt"

der den ganzen Directorywechsel und Programmaufruf abbildet.
Die Directorywechsel und der Programmaufruf funktionieren nur die Datei Liste.txt wird nicht gedruckt, offenbar weil sie nicht gefunden wird (?).
Wenn ich den SHELL-Befehl teile und den Programmaufruf in eine eigene SHELL schreibe wird das Druckprogramm gar nicht geöffnet.

EDIT: habe den Befehl nur geändert
Code:
SHELL "cd .. && cd \SVS\QBDruck && rghlist.exe /Liste.txt"

Jetzt erhalte ich die Meldung, dass Liste.txt nicht gefunden wird, die kam vorher nicht.
_________________
Grüße
kilix
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
hhr



Anmeldungsdatum: 15.07.2020
Beiträge: 84

BeitragVerfasst am: 13.12.2022, 11:30    Titel: Antworten mit Zitat

Entferne den Rückstrich vor SVS. Kein Schrägstrich vor Liste.txt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 13.12.2022, 11:42    Titel: Antworten mit Zitat

Hallo kilix,

"cd" funktioniert nicht mit dem SHELL - Befehl. Das aktuelle Verzeichnis wird mit CHDIR gewechselt.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
HorstD



Anmeldungsdatum: 01.11.2007
Beiträge: 107

BeitragVerfasst am: 13.12.2022, 11:49    Titel: Antworten mit Zitat

Versuch'mal:
Code:

SHELL "F:\SVS\QBDruck && rghlist.exe Liste.txt"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
kilix



Anmeldungsdatum: 05.02.2022
Beiträge: 175

BeitragVerfasst am: 13.12.2022, 14:50    Titel: Antworten mit Zitat

Vielen Dank für eure Antworten!
Ich habe jetzt die folgenden Varianten probiert:
Code:

   SHELL "chdir .. && F: && chdir \SVS\QBDruck && rghlist.exe Liste.txt"
   SHELL "\SVS\QBDruck\rghlist.exe \SVS\QBDruck\Liste.txt"
   SHELL "F:\SVS\QBDruck && rghlist.exe Liste.txt"
   SHELL "Liste.bat"

dazu
1) funktioniert gut
2) in dieser Form kann zwar Liste.txt aber nicht die darin enthaltene Bitmap geladen werden
3) Fehlermeldung: "F:\SVS\..." ist entweder falsch geschrieben oder kann nicht gefunden werden.
4) nachdem ich Probleme mit den Directories hatte habe ich den Vorgang (siehe 2.) in eien BAT-File gepackt und diesen mit SHELL aufgerufen, was gut funktioniert hat. Nachteil: unnötige, zusätzliche Datei.

Nochmals Danke für eure Hilfe!

Übrigens dieses Drucksystem QBDruck für Programmsprachen die das nicht selbst unterstützen ist fantastisch. Damit kann man (fast) alles drucken was man möchte - auch Grafiksymbile wie Linien etc. (gibt es auch als Freeware!)
_________________
Grüße
kilix
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4594
Wohnort: ~/

BeitragVerfasst am: 13.12.2022, 17:15    Titel: Antworten mit Zitat

grindstone hat Folgendes geschrieben:
"cd" funktioniert nicht mit dem SHELL - Befehl.

Jetzt bin ich etwas überrascht, weil ich in SHELL durchaus "cd" einsetze und meine Shell offenbar noch nichts gemerkt hat. geschockt
Code:
shell "cd .. & dir"
shell "chdir .. & dir"

liefern mir dieselben richtigen Ergebnisse; ist aber möglicherweise plattformabhängig.
Wobei ich nicht sicher bin, ob du vielleicht meintest, dass SHELL "cd" für sich allein nichts bewirkt, weil nach Ende der SHELL-Ausführung der Pfadwechsel wieder zurückgesetzt wird. Innerhalb eines SHELL-Aufrufs klappt es aber schon.

Ich folge dem Diskussionsverlauf sehr interessiert, weil ich in einem meiner Programme über SHELL asciidoc aufrufe, dem Parameter übergeben werden müssen und das seinerseits in Python ausgeführt wird. War ein bisschen knifflig, herauszufinden, wie ich den Arbeitspfad setzen muss, damit alle beteiligten Programme zufrieden sind ...

In der Regel finde ich es dann doch einfacher, über CHDIR (dem FreeBASIC-Befehl, nicht dem Befehl innerhalb von SHELL) zuerst den Pfad zu setzen und dann über SHELL die gewünschten Programme aufzurufen.

@kilix
Deine zweite Zeile funktioniert wahrscheinlich deshalb nicht, weil die in der Liste enthaltene Bitmap dann die falsche Pfadangabe hat. Die dritte Zeile könnte vielleicht so funktionieren (sofern du bereits auf Laufwerk F bist):
Code:
   SHELL "chdir F:\SVS\QBDruck && rghlist.exe Liste.txt"

_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
kilix



Anmeldungsdatum: 05.02.2022
Beiträge: 175

BeitragVerfasst am: 13.12.2022, 17:34    Titel: Antworten mit Zitat

ja, nemored, ich hatte das "cd" aus dem Handbuch für Einsteiger.
Dass, die zweite Variante nicht funktionierte liegt sicher daran, dass die Bitmap nicht gefunden wurde.
Was die 3. Variante betrifft habe ich sie nur aus einem Beitrag weiter vorne kopiert aber nachdem die Variante 2 gut funktioniert nicht weiter verfolgt.

Die BAT-Datei hatte ich nur wegen der Probleme gemacht und weil ich festgestellt hatte, dass es funktioniert wenn ich in der Console in das Verzeichnis des Programmen und der textdatei ging. Dir Bat-Datei hat das nur nachvollzogen und es funktioniert ja auch mit FreeBasic - ich verwende sie aber jetzt nicht.
_________________
Grüße
kilix
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 13.12.2022, 23:46    Titel: Antworten mit Zitat

Da habe ich wohl nicht gründlich genug getestet. traurig Im Konsolenfenster lässt sich das Laufwerk mit "cd" nicht wechseln, sondern nur der Pfad innerhalb des aktiven Laufwerks. Das Laufwerk muß gesondert mit "<Laufwerksbuchstabe>:" gesetzt werden. Im Gegensatz zum CHDIR - Befehl von FB, damit lässt sich auch das Laufwerk wechseln.

kilix hat Folgendes geschrieben:
4) nachdem ich Probleme mit den Directories hatte habe ich den Vorgang (siehe 2.) in eien BAT-File gepackt und diesen mit SHELL aufgerufen, was gut funktioniert hat. Nachteil: unnötige, zusätzliche Datei.
Die Batchdatei muß ja nicht permanent sein. Bei widerspenstigen Programmen, die sich nur über ein solches Batchfile zur Mitarbeit bewegen lassen, gibt es einen recht simplen Workaround:
Code:
Open "temp.bat" For Output As #1
Print #1, "F: && chdir \SVS\QBDruck && rghlist.exe Liste.txt"
Print #1, "\SVS\QBDruck\rghlist.exe \SVS\QBDruck\Liste.txt"
Print #1, "F:\SVS\QBDruck && rghlist.exe Liste.txt"
Print #1, "Liste.bat"
Close 1
Shell "temp.bat"
Kill "temp.bat"
Der Vorgang läuft dann komplett im Hintergrund ab, und man kann das Batchfile -falls nötig- bei jedem Aufruf an die aktuelllen Erfordernisse anpassen.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
kilix



Anmeldungsdatum: 05.02.2022
Beiträge: 175

BeitragVerfasst am: 14.12.2022, 09:02    Titel: Antworten mit Zitat

Danke grindstone! Ja, ist ja klar, eine BAT-Datei ist ja auch nur eine Textdatei!
_________________
Grüße
kilix
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2507
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 14.12.2022, 10:31    Titel: Antworten mit Zitat

Also folgendes trifft für Linux ganz sicher zu und für Windows vermutlich genauso: SHELL führt den CMD.EXE- bzw. /bin/sh-Befehl immer in einem Kindprozess aus. Dieser vererbt zum einen die Umgebungsvariablen (FB: Environ()) und natürlich auch den aktuellen Pfad ($PWD in Linux).

Somit wird bei einem CD nur der Pfad im Kindprozess geändert. Dies ist aber in der Regel kein Problem, wenn das Kommando als sog. Compound Command ausgeführt wird. Unter Linux wären dies einfach mit Semikolon getrennte Befehle. Bei Doppel-Ampersand ("&&") muss hingegen beachtet werden, dass der nächste Befehl nur ausgeführt wird, wenn der vorhergehende erfolgreich war (=%ERRORLEVEL% bzw. $? haben 0 zurückgegeben).
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
kilix



Anmeldungsdatum: 05.02.2022
Beiträge: 175

BeitragVerfasst am: 22.12.2022, 18:57    Titel: Problem mit For-Schleife Antworten mit Zitat

gelöscht, war hier falsch
_________________
Grüße
kilix
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz