Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
kilix
Anmeldungsdatum: 05.02.2022 Beiträge: 175
|
Verfasst am: 12.12.2022, 21:05 Titel: habe Problem mit SHELL |
|
|
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 |
|
 |
hhr
Anmeldungsdatum: 15.07.2020 Beiträge: 82
|
Verfasst am: 13.12.2022, 11:30 Titel: |
|
|
Entferne den Rückstrich vor SVS. Kein Schrägstrich vor Liste.txt. |
|
Nach oben |
|
 |
grindstone

Anmeldungsdatum: 03.10.2010 Beiträge: 1186 Wohnort: Ruhrpott
|
Verfasst am: 13.12.2022, 11:42 Titel: |
|
|
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 |
|
 |
HorstD
Anmeldungsdatum: 01.11.2007 Beiträge: 102
|
Verfasst am: 13.12.2022, 11:49 Titel: |
|
|
Versuch'mal:
Code: |
SHELL "F:\SVS\QBDruck && rghlist.exe Liste.txt"
|
|
|
Nach oben |
|
 |
kilix
Anmeldungsdatum: 05.02.2022 Beiträge: 175
|
Verfasst am: 13.12.2022, 14:50 Titel: |
|
|
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 |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4568 Wohnort: ~/
|
Verfasst am: 13.12.2022, 17:15 Titel: |
|
|
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.
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 |
|
 |
kilix
Anmeldungsdatum: 05.02.2022 Beiträge: 175
|
Verfasst am: 13.12.2022, 17:34 Titel: |
|
|
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 |
|
 |
grindstone

Anmeldungsdatum: 03.10.2010 Beiträge: 1186 Wohnort: Ruhrpott
|
Verfasst am: 13.12.2022, 23:46 Titel: |
|
|
Da habe ich wohl nicht gründlich genug getestet. 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 |
|
 |
kilix
Anmeldungsdatum: 05.02.2022 Beiträge: 175
|
Verfasst am: 14.12.2022, 09:02 Titel: |
|
|
Danke grindstone! Ja, ist ja klar, eine BAT-Datei ist ja auch nur eine Textdatei! _________________ Grüße
kilix |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2505 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 14.12.2022, 10:31 Titel: |
|
|
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 |
|
 |
kilix
Anmeldungsdatum: 05.02.2022 Beiträge: 175
|
Verfasst am: 22.12.2022, 18:57 Titel: Problem mit For-Schleife |
|
|
gelöscht, war hier falsch _________________ Grüße
kilix |
|
Nach oben |
|
 |
|