Wie setzt man VOL als SET ein?
Hallo, ich bin 76 Jahre "jung", habe von Basic keine Ahnung, möchte aber meine (funktionierende) NB.BAT automatisieren.
Mein OS ist DOS.
Habe zwei Primäre Partitionen und möchte beim Booten die "richtige" anzeigen und u.U. wechseln.
Um mein Problem richtig zu beschreiben, der Ist-zustand:
a. In der Autoexec.bat:
b. Auf Laufwerk D:\NB\ sind:
1. NB.BAT mit dem Inhalt:
2. Eine NB1.TXT Datei mit dem Inhalt:
3. Eine NB2.TXT Datei mit dem gleichen Inhalt (nur die PART. Zahlen sind vertauscht.)
4. Eine PQBOOT.EXE (Das ist ein Powerquest Programm, der je nach Vorwahl neu bootet.
Meine Idee:
a. Auf den Befehl SET in der autoexec.bat zu verzichten und ihm in der NB.BAT einzusetzen.
Dazu den Befehl VOl > vol.txt verwenden. Aber NUR den Teil mit dem Nummer im Namen.
Denn die Ausgabe sieht z.B. so aus:
b. Möglichst mit nur eine NB.TXT arbeiten und im Text "nur" die Zahlen zu wechseln.
Hat jemand eine Lösung für mich?
Mein OS ist DOS.
Habe zwei Primäre Partitionen und möchte beim Booten die "richtige" anzeigen und u.U. wechseln.
Um mein Problem richtig zu beschreiben, der Ist-zustand:
a. In der Autoexec.bat:
- @PATH D:\NB;
- @SET NB=P1 und P2 je nach Partition
- @CALL D:\NB\NB
1. NB.BAT mit dem Inhalt:
@echo off
IF %NB%==P1 GOTO PAR_1
IF %NB%==P2 GOTO PAR_2
IF NOT EXIST %NB% GOTO FEHLER
:PAR_1
COPY D:\NB\NB4.TXT D:\NB\NB.TXT
GOTO WEITER
:PAR_2
COPY D:\NB\NB5.TXT D:\NB\NB.TXT
GOTO WEITER
:FEHLER
ECHO SET NB gibt es nicht!
:WEITER
@BE D:\NB\NB.txt
rem ------- Eingabe auwerten -------
IF ERRORLEVEL 2 GOTO ENDE
IF ERRORLEVEL 1 GOTO NB
GOTO ENDE
:NB
ECHO N (N)euboot
CALL D:\NB\PQBOOT.EXE
GOTO ENDE
:ENDE
DEL D:\NB\NB.TXT
ECHO W (W)eiter
SA /CLS
WINDOW 1,08,12,65 LEUCHTEND GELB AUF BLAU EXPLODE
ROWCOL 02,20 "*** ICH BIN EIN ERSATZ PRA-PC ***"
ROWCOL 04,24 "Nun bist Du gerade dabei die"
ROWCOL 05,27 "PART. 1 zu starten."
ROWCOL 07,24 "Wenn es die richtige Linie ist,"
ROWCOL 08,24 "truecke die Taste >W<."
ROWCOL 10,24 "Die PART. 2 kannst du starten,"
ROWCOL 11,24 "nach dem Druck auf Taste >N<."
WINDOW 14,15,16,57 LEUCHTEND WEISS AUF MAGENTA
ROWCOL 15,17
ASK "Deine Wahl: W [W]eiter oder N [N]euboot " NW DEFAULT=W
ROWCOL 17,0
SA /CLS
ROWCOL 1,0
4. Eine PQBOOT.EXE (Das ist ein Powerquest Programm, der je nach Vorwahl neu bootet.
Meine Idee:
a. Auf den Befehl SET in der autoexec.bat zu verzichten und ihm in der NB.BAT einzusetzen.
Dazu den Befehl VOl > vol.txt verwenden. Aber NUR den Teil mit dem Nummer im Namen.
Denn die Ausgabe sieht z.B. so aus:
Datentrger in Laufwerk C ist LIN_1
Datentrgernummer: 3640-17F7
Hat jemand eine Lösung für mich?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 2125519844
Url: https://administrator.de/contentid/2125519844
Ausgedruckt am: 25.11.2024 um 08:11 Uhr
57 Kommentare
Neuester Kommentar
Hi.
Finde dich STARK.
DOS erinnert mich an Ambitionen mit autoexec.bat und config.sys Befehlen die Ausbeute an RAM zu maximieren ...
... > 25 Jahre vor heute.
Ich fürchte, das du mit deiner Partitions-Boot-Steuerung, wie du sie realisiert hast, uns allen etwas voraus hast - auf DOS-Ebene.
Wir steuern Multi-Boot - wie du sicher weisst -heute mit Tools die anders vorgehen...
Aber, wenn ich dich richtig cerstanden habe, möchtest du beim Booten die Wahl zwischen 2 DOS Partitionen - beide primare Partitionen haben...
Nur, was du "automatisieren möchtest, verstehe ich nicht - liegt aber sicher an meiner eingeschränkten modernen Erfahrung ...
.
Finde dich STARK.
DOS erinnert mich an Ambitionen mit autoexec.bat und config.sys Befehlen die Ausbeute an RAM zu maximieren ...
... > 25 Jahre vor heute.
Ich fürchte, das du mit deiner Partitions-Boot-Steuerung, wie du sie realisiert hast, uns allen etwas voraus hast - auf DOS-Ebene.
Wir steuern Multi-Boot - wie du sicher weisst -heute mit Tools die anders vorgehen...
Aber, wenn ich dich richtig cerstanden habe, möchtest du beim Booten die Wahl zwischen 2 DOS Partitionen - beide primare Partitionen haben...
Nur, was du "automatisieren möchtest, verstehe ich nicht - liegt aber sicher an meiner eingeschränkten modernen Erfahrung ...
.
N'Abend,
das mit der Auswahl von Partitionen habe ich auch immer integriert, nutze es unter Win7 sogar noch, nur:
Ich habe immer ein Programm genutzt was folgendes gemacht hat:
Partition1 -Aktiv
Partition2 -Versteckt
--> Partition 1 wurde gestartet
Partition2 -Aktiv
Partition1 -Versteckt
--> Partition 2 wurde gestartet
Es war immer nur die aktive Partition sichtbar.
Die Auswahl war bei jedem Start Sicht- und Auswählbar, ohne überhaupt mit Dateien zu arbeiten.
Autoexec.bat und Config.sys mussten natürlich auf jeder Partition vorhanden sein
Ich könnte Dir mehr Infos zu diesem Programm zusenden, wenn Du willst.
Die Wirkungsweise von PQBOOT.EXE kenne ich leider nicht.
Den Bootmanager den ich hier unter Win7/64 nutze ist Boot US
Es ist aber nicht der, den ich damals unter DOS/WIN eingesetzt habe, arbeitet aber ähnlich, aber wird unter DOS konfiguriert.
Schönes WE - Minion
das mit der Auswahl von Partitionen habe ich auch immer integriert, nutze es unter Win7 sogar noch, nur:
Ich habe immer ein Programm genutzt was folgendes gemacht hat:
Partition1 -Aktiv
Partition2 -Versteckt
--> Partition 1 wurde gestartet
Partition2 -Aktiv
Partition1 -Versteckt
--> Partition 2 wurde gestartet
Es war immer nur die aktive Partition sichtbar.
Die Auswahl war bei jedem Start Sicht- und Auswählbar, ohne überhaupt mit Dateien zu arbeiten.
Autoexec.bat und Config.sys mussten natürlich auf jeder Partition vorhanden sein
Ich könnte Dir mehr Infos zu diesem Programm zusenden, wenn Du willst.
Die Wirkungsweise von PQBOOT.EXE kenne ich leider nicht.
Den Bootmanager den ich hier unter Win7/64 nutze ist Boot US
Es ist aber nicht der, den ich damals unter DOS/WIN eingesetzt habe, arbeitet aber ähnlich, aber wird unter DOS konfiguriert.
Schönes WE - Minion
@bm-magic um die Seriennummer vom commando vol in eine variable zu bekommen könntest du so etwas nutzen:
for /f "skip=1 delims=" %%a in ('vol') do set SerienNummer=%%a
set SerienNummer=%SerienNummer:~-9%
echo %SerienNummer%
Oder
for /f "tokens=2 skip=1 delims=: " %%a in ('vol') do set SerienNummer=%%a
echo %SerienNummer%
for /f "skip=1 delims=" %%a in ('vol') do set SerienNummer=%%a
set SerienNummer=%SerienNummer:~-9%
echo %SerienNummer%
Oder
for /f "tokens=2 skip=1 delims=: " %%a in ('vol') do set SerienNummer=%%a
echo %SerienNummer%
Hallo,
um die Seriennummer aus Bsp1/Obere auszulesen versuch mal das:
<Enter>
Die letzten 9 Ziffern werden ausgegeben.
Danke @ricardobohner für den Denkanstoss :>)
Viel Spass
PS Unter Win7/64 cmd ... :>((
um die Seriennummer aus Bsp1/Obere auszulesen versuch mal das:
for /f "skip=1 delims=;" %a in ('vol') do set SNr=%a
set SerienNummer=%SNr:~-9%
echo %SerienNummer%
<Enter>
Die letzten 9 Ziffern werden ausgegeben.
Danke @ricardobohner für den Denkanstoss :>)
Viel Spass
PS Unter Win7/64 cmd ... :>((
Hallo Leute,
Ich hab mal hier nachgekuckt wo man ein dos system online simulieren kann:
https://www.pcjs.org/software/pcx86/sys/dos/microsoft/6.22/
Und tatsächlich funcktioniert der for loop dort anders als im Windows hab da mal ein for /? commando eingegeben um die hilfe des commandos zu bekommen und der hat anscheinend keine for /f option... Das muss irgendwann mal später im Windows eingeführt worden sein... leider weiss ich so auch nicht wie man nur die Seriennummer speichern kann...
Ich hab mal hier nachgekuckt wo man ein dos system online simulieren kann:
https://www.pcjs.org/software/pcx86/sys/dos/microsoft/6.22/
Und tatsächlich funcktioniert der for loop dort anders als im Windows hab da mal ein for /? commando eingegeben um die hilfe des commandos zu bekommen und der hat anscheinend keine for /f option... Das muss irgendwann mal später im Windows eingeführt worden sein... leider weiss ich so auch nicht wie man nur die Seriennummer speichern kann...
Du vermischst die "neue" Batch Syntax der cmd.exe (seit Windows NT) mit der Syntax der command.com (DOS). So etwas wie enableDelayedExpansion oder Substrings in Variablen hast du schlichtweg nicht zur Verfügung. Auch Option /F für FOR Schleifen gibt es nicht unter DOS. Du wirst also nicht ohne Hilfe von BASIC auskommen. Es ist aber ~30 Jahre her, dass ich mich das letzte mal mit so etwas befasst habe. In meinem gesamten Umfeld gibt es auch keine Chance mehr irgendwo auf einem DOS System zu testen.
Steffen
Steffen
Ich hab mal kurz Google gequält. Prüf mal bitte ob du die gewünschten Ausgaben bekommst. Heißt, einmal sollte N1 1 und N2 2 sein und einmal sollte N1 2 und N2 1 sein.
Die Laufwerksbuchstaben musst du sicher noch anpassen ...
Das Script schreibt eine NUM.BAS Datei mit folgendem Inhalt und ruft diese auf:
Was ich nicht weiß, ist, ob SYSTEM n% tatsächlich einen Errorlevelwert setzt. Quellen im Netz widersprechen sich und es scheint abhängig von der QBasic version zu sein. Frag ggf. noch mal in einem QBasic Forum, was da notwendig wäre.
Wie auch immer, wenn das funktioniert, hast du schon mal die beiden Werte mit denen du die NB.TXT neu schreiben kannst.
Steffen
@ECHO OFF
REM Ausgabe von VOL in Datei umleiten
VOL>C:\VOL.TXT
REM Datei NUM.BAS schreiben.
ECHO ' Textdatei oeffnen>C:\NUM.BAS
ECHO OPEN "C:\VOL.TXT" FOR INPUT AS #1>>C:\NUM.BAS
ECHO ' erste Zeile lesen>>C:\NUM.BAS
ECHO LINE INPUT #1, ln$>>C:\NUM.BAS
ECHO ' Textdatei schliessen>>C:\NUM.BAS
ECHO CLOSE #1>>C:\NUM.BAS
ECHO ' letztes Zeichen der ersten Zeile in numerischen Wert konvertieren>>C:\NUM.BAS
ECHO n%% = VAL(RIGHT$(ln$, 1))>>C:\NUM.BAS
ECHO ' Wert als Errorlevel zurueckgeben>>C:\NUM.BAS
ECHO SYSTEM n%%>>C:\NUM.BAS
REM Nummern vordefinieren
SET N1=1&SET N2=2
REM QBasic Code ausfuehren
QBASIC /RUN C:\NUM.BAS
REM Wenn der Errorlevel-Wert >= 2 ist, dann Nummern neu definieren.
IF ERRORLEVEL 2 SET N1=2&SET N2=1
ECHO N1 %N1%
ECHO N2 %N2%
PAUSE
Das Script schreibt eine NUM.BAS Datei mit folgendem Inhalt und ruft diese auf:
' Textdatei oeffnen
OPEN "C:\VOL.TXT" FOR INPUT AS #1
' erste Zeile lesen
LINE INPUT #1, ln$
' Textdatei schliessen
CLOSE #1
' letztes Zeichen der ersten Zeile in numerischen Wert konvertieren
n% = VAL(RIGHT$(ln$, 1))
' Wert als Errorlevel zurueckgeben
SYSTEM n%
Wie auch immer, wenn das funktioniert, hast du schon mal die beiden Werte mit denen du die NB.TXT neu schreiben kannst.
Steffen
Da kommt halt die QBASIC Syntax ins Spiel, wo ich auch nicht mehr viel weiß. Aber wenn du mir verrätst welche Version von QBASIC du installiert hast, werfe ich Google noch mal an um mehr Informationen zu bekommen. Falls es Version 4.5 ist, ließe sich das meiner Meinung nach noch ein bisschen besser lösen.
Steffen
Steffen
Hallo Bohu,
Dann haben wir ungefähr dieselbe Entfernung zu deiner alten Heimat (Gotha, Thüringen)
Ver. 1.1 macht es jetzt leider nicht einfacher. Soweit ich herausfinden konnte, ist es da noch nicht möglich gewesen, einen Rückgabewert zu setzen. Derzeitige Idee:
Bevor ich da ran gehe, noch ein paar Fragen:
Steffen
Dann haben wir ungefähr dieselbe Entfernung zu deiner alten Heimat (Gotha, Thüringen)
Ver. 1.1 macht es jetzt leider nicht einfacher. Soweit ich herausfinden konnte, ist es da noch nicht möglich gewesen, einen Rückgabewert zu setzen. Derzeitige Idee:
- Batch erzeugt VER.TXT
- QBasic liest VER.TXT und löscht VER.TXT falls 2 das letzte Zeichen der ersten Zeile ist.
- Batch prüft Vorhandensein von VER.TXT und definiert Variablen ggf. neu.
Bevor ich da ran gehe, noch ein paar Fragen:
- Ich habe mir deinen Inhalt von VER.TXT oben noch mal genauer angesehen. e Die erste Zeile endet dort nicht mit 1 sondern mit einer Reihe Leerzeichen. Ist das wirklich so?
- Bin über deinen Thread im QBasic Forum gestolpert https://forum.qbasic.at/viewtopic.php?t=9133&sid=4ec79a2e76c1685ea12 ... Dort endet die erste Zeile auf PART_1 statt LIN_1. Was ist richtig?
- Kannst du bitte noch mal genau sagen, wo (Laufwerk) sich die einzelnen Dateien bei dir befinden?
Steffen
Hier meine vorläufige Umsetzung:
Die 3 Variablen am Anfang ggf. anpassen. Insbesondere SEARCH noch mal ansehen, die die Suchzeichenfolge vor der Nummer in VOL.TXT beinhaltet.
Steffen
@ECHO OFF
SET VOLDAT=VOL.TXT
SET SEARCH=LIN_
SET SCRIPT=LAUFW.BAS
REM Ausgabe von VOL in Datei umleiten
VOL C:>%VOLDAT%
REM ggf. QBasic Code erzeugen
REM IF NOT EXIST %SCRIPT% GOTO CREATE
REM QBasic Code immer neu erzeugen, solange wir testen
GOTO CREATE
:ENDCREATE
REM QBasic ausfuehren
QBASIC /RUN %SCRIPT%
REM Erstellte Textdatei suchen und Nummer definieren.
IF EXIST N1 GOTO N1
IF EXIST N2 GOTO N2
IF EXIST N3 GOTO N3
IF EXIST N4 GOTO N4
IF EXIST N5 GOTO N5
IF EXIST N6 GOTO N6
IF EXIST N7 GOTO N7
IF EXIST N8 GOTO N8
IF EXIST N9 GOTO N9
ECHO Nummer nicht gefunden.
PAUSE
GOTO EOF
:ERR
DEL N%NX%
ECHO LIN_%NX% existiert nicht.
PAUSE
GOTO EOF
:FOUND
DEL N%NX%
ECHO NX %NX%
ECHO NY %NY%
PAUSE
GOTO EOF
REM ~~~~~~~~~~~~~~~ Subroutinen ~~~~~~~~~~~~~~~
REM Datei LAUFW.BAS schreiben.
:CREATE
ECHO ' Suchzeichenfolge vor der Nummer in der Textdatei>%SCRIPT%
ECHO s$ = "%SEARCH%">>%SCRIPT%
ECHO ' Textdatei oeffnen>>%SCRIPT%
ECHO OPEN "%VOLDAT%" FOR INPUT AS #1>>%SCRIPT%
ECHO ' erste Zeile lesen>>%SCRIPT%
ECHO LINE INPUT #1, ln$>>%SCRIPT%
ECHO ' zweite Zeile lesen>>%SCRIPT%
ECHO LINE INPUT #1, ln$>>%SCRIPT%
ECHO ' Textdatei schliessen>>%SCRIPT%
ECHO CLOSE #1>>%SCRIPT%
ECHO ' Zahl nach der Suchzeichenfolge extrahieren>>%SCRIPT%
ECHO n$ = MID$(ln$, INSTR(ln$, s$) + LEN(s$), 1)>>%SCRIPT%
ECHO ' Datei mit lediglich N und der Zahl als Dateiname erzeugen>>%SCRIPT%
ECHO n$ = "N" + n$>>%SCRIPT%
ECHO OPEN n$ FOR OUTPUT AS #1>>%SCRIPT%
ECHO CLOSE #1>>%SCRIPT%
ECHO ' Script beenden>>%SCRIPT%
ECHO SYSTEM>>%SCRIPT%
GOTO ENDCREATE
REM Variable N definieren, abhaengig von der gefundenen Datei
:N1
SET NX=1
GOTO ERR
:N2
SET NX=2
GOTO ERR
:N3
SET NX=3
GOTO ERR
:N4
SET NX=4
SET NY=5
GOTO FOUND
:N5
SET NX=5
SET NY=4
GOTO FOUND
:N6
SET NX=6
GOTO ERR
:N7
SET NX=7
GOTO ERR
:N8
SET NX=8
GOTO ERR
:N9
SET NX=9
GOTO ERR
REM ~~~~~~~~~~~~~~~ Ende ~~~~~~~~~~~~~~~
:EOF
Steffen
Hallo Bohu
Ich ändere jetzt oben den Code noch mal. Lass den mal laufen, ohne dass du Laufwerk und Pfad hinzufügst. Dann findet zwar erst mal alles im Arbeitsverzeichnis der Batchdatei statt, aber das ist zum Testen gut genug. Vielleicht ist dann auch die Fehlermeldung weg. Falls ja, dann ist sicher noch irgendwo ein expliziter Laufwerkswechsel im Script nötig.
Steffen
Kann man nicht z.B. auf LIN_4 und LIN_5 prüfen
Natürlich kann man das. Aber hättest du die Screenshots nicht angehängt, wäre ich niemals auf die Idee gekommen, dass es so etwas wie LIN_4 und LIN_5 überhaupt gibt. Computer sind doof. Man muss ihnen exakt sagen was sie tun sollen. Und dazu musst du unbedingt exakte Angaben machen auf die ich mich beziehen kann, sonst sind wir in einem halben Jahr noch keinen Schritt weiter.Ich ändere jetzt oben den Code noch mal. Lass den mal laufen, ohne dass du Laufwerk und Pfad hinzufügst. Dann findet zwar erst mal alles im Arbeitsverzeichnis der Batchdatei statt, aber das ist zum Testen gut genug. Vielleicht ist dann auch die Fehlermeldung weg. Falls ja, dann ist sicher noch irgendwo ein expliziter Laufwerkswechsel im Script nötig.
Steffen
Hallo Bohu
Wenn ich den Titel im Editor richtig deute, hast du den Code als LAUFW2.BAS gespeichert. NEIN! Das ist Batchcode (Endung .BAT)!
Der Batchcode erzeugt die .BAS Datei und ruft auch QBasic mit der .BAS Datei auf. Darum sollst du dich nicht kümmern müssen.
Ich hab den Code oben abermals aktualisiert. Nun solltest du exakt die Nummer nach LIN_ ausgegeben bekommen. Hoffentlich
Steffen
schläfst Du auch "irgendwann"?
Das frage ich mich selbst auch manchmal."Ein Bild sagt mehr als 1000 Worte".
Oh, ich glaube damit hast du Recht.Wenn ich den Titel im Editor richtig deute, hast du den Code als LAUFW2.BAS gespeichert. NEIN! Das ist Batchcode (Endung .BAT)!
Der Batchcode erzeugt die .BAS Datei und ruft auch QBasic mit der .BAS Datei auf. Darum sollst du dich nicht kümmern müssen.
Ich hab den Code oben abermals aktualisiert. Nun solltest du exakt die Nummer nach LIN_ ausgegeben bekommen. Hoffentlich
Eine GUTE Nacht.
Das wünsche ich dir auch. Neuer Tag, neues Glück.Steffen
Hallo Bohu,
darüber, wer keinen Schlaf findet, müssen wir jetzt aber nicht mehr reden
Hatte bis zur Mittagspause noch andere Dinge zu erledigen, aber jetzt kann ich dir antworten ...
Die gute Nachricht ist, dass das BASIC Script tut was es soll und auch das Batch Script schon fast das tut was es soll. Irgendwie scheint da aber noch ein Fehler drin zu sein. Kopier es einfach noch mal neu. Wichtig ist, dass du die erzeugten Dateien "4" und/oder "5" händisch löscht, bevor du neu testest. Das sollte das Batch Script eigentlich automatisch erledigen. Ansonsten wird immer die Datei mit der kleinsten Nummer zuerst gefunden, auch wenn BASIC eine Datei mit einer höheren Nummer erzeugt hat. Wenn alles funktioniert, solltest du eine Ausgabe, wie
Steffen
EDIT: Wie ich gerade nachgelesen habe, gab es das
EDIT 2: Ich hab's mir noch mal überlegt. Wir gehen lieber den umständlichen aber sicheren Weg über Subroutinen.
darüber, wer keinen Schlaf findet, müssen wir jetzt aber nicht mehr reden
Hatte bis zur Mittagspause noch andere Dinge zu erledigen, aber jetzt kann ich dir antworten ...
Die gute Nachricht ist, dass das BASIC Script tut was es soll und auch das Batch Script schon fast das tut was es soll. Irgendwie scheint da aber noch ein Fehler drin zu sein. Kopier es einfach noch mal neu. Wichtig ist, dass du die erzeugten Dateien "4" und/oder "5" händisch löscht, bevor du neu testest. Das sollte das Batch Script eigentlich automatisch erledigen. Ansonsten wird immer die Datei mit der kleinsten Nummer zuerst gefunden, auch wenn BASIC eine Datei mit einer höheren Nummer erzeugt hat. Wenn alles funktioniert, solltest du eine Ausgabe, wie
N 4
oder N 5
als letzte Ausgabe bekommen. Falls nicht, müssen wir auf Ursachenforschung gehen.Steffen
EDIT: Wie ich gerade nachgelesen habe, gab es das
&
als Kommandoverknüpfung unter DOS wohl noch nicht. Also habe ich das Script noch mal angepasst, in der Hoffnung, dass Klammerblöcke unterstützt werden.EDIT 2: Ich hab's mir noch mal überlegt. Wir gehen lieber den umständlichen aber sicheren Weg über Subroutinen.
Hallo Bohu,
ich habe es noch nicht ganz verstanden, funktioniert das Script jetzt?
Was es mit ASCII 8 als Beginn der Zeile auf sich hat, kann ich nicht deuten. Ist das eine besondere Voraussetzung unter DOS? Ich kenne das Zeichen nur als "Backspace", was zumindest unter Windows ein Zurücklaufen des Cursors um ein Zeichen verursacht.
Wenn N immer 1 ist, wäre das aber noch nicht richtig, oder? Hast du noch eine leere Datei "1" im Ordner?
Steffen
ich habe es noch nicht ganz verstanden, funktioniert das Script jetzt?
Was es mit ASCII 8 als Beginn der Zeile auf sich hat, kann ich nicht deuten. Ist das eine besondere Voraussetzung unter DOS? Ich kenne das Zeichen nur als "Backspace", was zumindest unter Windows ein Zurücklaufen des Cursors um ein Zeichen verursacht.
Wenn N immer 1 ist, wäre das aber noch nicht richtig, oder? Hast du noch eine leere Datei "1" im Ordner?
Steffen
Ich habe eine "Ahnung" was die Ursache sein könnte: 1 ist immer vorhanden da 1 als Stream Nummer für die Standard-Ausgabe interpretiert wird. Ich lasse QBasic mal Dateien erzeugen, die mit N anfangen (also bspw. "N4"). Außerdem brauchen wir ja später für die NB.TXT zwei Variablen. Also definiere ich jetzt Variablen NX und NY für LIN_4 und LIN_5. Alle anderen Nummern laufen in eine Fehlermeldung.
Script ist sofort geändert ...
Steffen
Script ist sofort geändert ...
Steffen
Wird eine leere Datei N4 oder N5 erstellt?
Wie gesagt, ich hatte die IF EXIST Anweisungen vergessen. Wenn da bei dir noch
statt
steht, müsstest du noch mal neu testen.
Steffen
Wie gesagt, ich hatte die IF EXIST Anweisungen vergessen. Wenn da bei dir noch
IF EXIST 1 GOTO N1
statt
IF EXIST N1 GOTO N1
steht, müsstest du noch mal neu testen.
es fehlt im SET die N=1
Sollte jetzt auch nicht mehr existieren. Stattdessen NX=4 und NY=5 bzw. umgekehrt.Steffen
Hallo Bohu,
dann haben wir die erste Hürde geschafft. Nein, Dateien "1" oder "2" darf es nicht mehr geben. Wenn überhaupt dann "N4" oder "N5". Die soll das Script aber löschen sobald sie gefunden werden, damit sie beim nächsten Aufruf nicht bereits existieren. Also alles so wie gewollt
Jetzt können wir langsam ins Finale gehen. Erster Stepp: NB.TXT schreiben, indem wir die Variablen NX und NY verwenden.
Am Ende sollte jetzt der Inhalt der NB.TXT ausgegeben werden, mit
in einer Zeile und
weiter unten. Die 4 und 5 vertauscht im anderen Fall.
Grüße
Steffen
dann haben wir die erste Hürde geschafft. Nein, Dateien "1" oder "2" darf es nicht mehr geben. Wenn überhaupt dann "N4" oder "N5". Die soll das Script aber löschen sobald sie gefunden werden, damit sie beim nächsten Aufruf nicht bereits existieren. Also alles so wie gewollt
Jetzt können wir langsam ins Finale gehen. Erster Stepp: NB.TXT schreiben, indem wir die Variablen NX und NY verwenden.
@ECHO OFF
SET VOLDAT=VOL.TXT
SET SEARCH=LIN_
SET SCRIPT=LAUFW.BAS
SET NBTXT=NB.TXT
REM Ausgabe von VOL in Datei umleiten
VOL C:>%VOLDAT%
REM ggf. QBasic Code erzeugen
IF NOT EXIST %SCRIPT% GOTO CREATE
:ENDCREATE
REM QBasic ausfuehren
QBASIC /RUN %SCRIPT%
REM Erstellte Textdatei suchen und Nummer definieren.
IF EXIST N1 GOTO N1
IF EXIST N2 GOTO N2
IF EXIST N3 GOTO N3
IF EXIST N4 GOTO N4
IF EXIST N5 GOTO N5
IF EXIST N6 GOTO N6
IF EXIST N7 GOTO N7
IF EXIST N8 GOTO N8
IF EXIST N9 GOTO N9
ECHO Nummer nicht gefunden.
PAUSE
GOTO EOF
:ERR
DEL N%NX%
ECHO LIN_%NX% existiert nicht.
PAUSE
GOTO EOF
:FOUND
DEL N%NX%
GOTO WRITENB
:ENDWRITENB
REM Ausgeben, was in NB.TXT geschrieben wurde
ECHO -------------
TYPE %NBTXT%
ECHO -------------
PAUSE
GOTO EOF
REM ~~~~~~~~~~~~~~~ Subroutinen ~~~~~~~~~~~~~~~
REM Datei LAUFW.BAS schreiben.
:CREATE
ECHO ' Suchzeichenfolge vor der Nummer in der Textdatei>%SCRIPT%
ECHO s$ = "%SEARCH%">>%SCRIPT%
ECHO ' Textdatei oeffnen>>%SCRIPT%
ECHO OPEN "%VOLDAT%" FOR INPUT AS #1>>%SCRIPT%
ECHO ' erste Zeile lesen>>%SCRIPT%
ECHO LINE INPUT #1, ln$>>%SCRIPT%
ECHO ' zweite Zeile lesen>>%SCRIPT%
ECHO LINE INPUT #1, ln$>>%SCRIPT%
ECHO ' Textdatei schliessen>>%SCRIPT%
ECHO CLOSE #1>>%SCRIPT%
ECHO ' Zahl nach der Suchzeichenfolge extrahieren>>%SCRIPT%
ECHO n$ = MID$(ln$, INSTR(ln$, s$) + LEN(s$), 1)>>%SCRIPT%
ECHO ' Datei mit lediglich N und der Zahl als Dateiname erzeugen>>%SCRIPT%
ECHO n$ = "N" + n$>>%SCRIPT%
ECHO OPEN n$ FOR OUTPUT AS #1>>%SCRIPT%
ECHO CLOSE #1>>%SCRIPT%
ECHO ' Script beenden>>%SCRIPT%
ECHO SYSTEM>>%SCRIPT%
GOTO ENDCREATE
REM Variablen NX und NY definieren, abhaengig von der gefundenen Datei
:N1
SET NX=1
GOTO ERR
:N2
SET NX=2
GOTO ERR
:N3
SET NX=3
GOTO ERR
:N4
SET NX=4
SET NY=5
GOTO FOUND
:N5
SET NX=5
SET NY=4
GOTO FOUND
:N6
SET NX=6
GOTO ERR
:N7
SET NX=7
GOTO ERR
:N8
SET NX=8
GOTO ERR
:N9
SET NX=9
GOTO ERR
REM NB.TXT schreiben
:WRITENB
ECHO SA /CLS>%NBTXT%
ECHO WINDOW 1,08,12,65 LEUCHTEND GELB AUF BLAU EXPLODE>>%NBTXT%
ECHO ROWCOL 02,20 "*** ICH BIN EIN ERSATZ PRA-PC ***">>%NBTXT%
ECHO ROWCOL 04,24 "Nun bist Du gerade dabei die">>%NBTXT%
ECHO ROWCOL 05,27 "PART. LIN_%NX% zu starten.">>%NBTXT%
ECHO ROWCOL 07,24 "Wenn es die richtige Linie ist,">>%NBTXT%
ECHO ROWCOL 08,24 "druecke die Taste W.">>%NBTXT%
ECHO ROWCOL 10,24 "Die PART. LIN_%NY% kannst du starten,">>%NBTXT%
ECHO ROWCOL 11,24 "nach dem Druck auf Taste N.">>%NBTXT%
ECHO WINDOW 14,15,16,57 LEUCHTEND WEISS AUF MAGENTA>>%NBTXT%
ECHO ROWCOL 15,17 >>%NBTXT%
ECHO ASK "Deine Wahl: W [W]eiter oder N [N]euboot " NW DEFAULT=W>>%NBTXT%
ECHO ROWCOL 17,0 >>%NBTXT%
ECHO SA /CLS>>%NBTXT%
ECHO ROWCOL 1,0 >>%NBTXT%
GOTO ENDWRITENB
REM ~~~~~~~~~~~~~~~ Ende ~~~~~~~~~~~~~~~
:EOF
Am Ende sollte jetzt der Inhalt der NB.TXT ausgegeben werden, mit
"PART. LIN_4 zu starten."
in einer Zeile und
"Die PART. LIN_5 kannst du starten,"
weiter unten. Die 4 und 5 vertauscht im anderen Fall.
Grüße
Steffen
So könnte das nun funktionieren, hoffe ich:
Grüße
Steffen
@ECHO OFF
SET VOLDAT=VOL.TXT
SET SEARCH=LIN_
SET SCRIPT=LAUFW.BAS
SET NBTXT=D:\NB\NB.txt
REM Ausgabe von VOL in Datei umleiten
VOL C:>%VOLDAT%
REM ggf. QBasic Code erzeugen
IF NOT EXIST %SCRIPT% GOTO CREATE
:ENDCREATE
REM QBasic ausfuehren
QBASIC /RUN %SCRIPT%
REM Erstellte Textdatei suchen und Nummer definieren.
IF EXIST N1 GOTO N1
IF EXIST N2 GOTO N2
IF EXIST N3 GOTO N3
IF EXIST N4 GOTO N4
IF EXIST N5 GOTO N5
IF EXIST N6 GOTO N6
IF EXIST N7 GOTO N7
IF EXIST N8 GOTO N8
IF EXIST N9 GOTO N9
ECHO Nummer nicht gefunden.
GOTO EOF
:ERR
DEL N%NX%
ECHO LIN_%NX% existiert nicht.
GOTO EOF
:FOUND
DEL N%NX%
REM NB.TXT schreiben
GOTO WRITENB
:ENDWRITENB
@BE %NBTXT%
REM Eingabe auswerten
IF ERRORLEVEL 2 GOTO EOF
ECHO N (N)euboot
CALL D:\NB\PQBOOT.EXE
GOTO EOF
REM ~~~~~~~~~~~~~~~ Subroutinen ~~~~~~~~~~~~~~~
REM Datei LAUFW.BAS schreiben.
:CREATE
ECHO ' Suchzeichenfolge vor der Nummer in der Textdatei>%SCRIPT%
ECHO s$ = "%SEARCH%">>%SCRIPT%
ECHO ' Textdatei oeffnen>>%SCRIPT%
ECHO OPEN "%VOLDAT%" FOR INPUT AS #1>>%SCRIPT%
ECHO ' erste Zeile lesen>>%SCRIPT%
ECHO LINE INPUT #1, ln$>>%SCRIPT%
ECHO ' zweite Zeile lesen>>%SCRIPT%
ECHO LINE INPUT #1, ln$>>%SCRIPT%
ECHO ' Textdatei schliessen>>%SCRIPT%
ECHO CLOSE #1>>%SCRIPT%
ECHO ' Zahl nach der Suchzeichenfolge extrahieren>>%SCRIPT%
ECHO n$ = MID$(ln$, INSTR(ln$, s$) + LEN(s$), 1)>>%SCRIPT%
ECHO ' Datei mit lediglich N und der Zahl als Dateiname erzeugen>>%SCRIPT%
ECHO n$ = "N" + n$>>%SCRIPT%
ECHO OPEN n$ FOR OUTPUT AS #1>>%SCRIPT%
ECHO CLOSE #1>>%SCRIPT%
ECHO ' Script beenden>>%SCRIPT%
ECHO SYSTEM>>%SCRIPT%
GOTO ENDCREATE
REM Variablen NX und NY definieren, abhaengig von der gefundenen Datei
:N1
SET NX=1
GOTO ERR
:N2
SET NX=2
GOTO ERR
:N3
SET NX=3
GOTO ERR
:N4
SET NX=4
SET NY=5
GOTO FOUND
:N5
SET NX=5
SET NY=4
GOTO FOUND
:N6
SET NX=6
GOTO ERR
:N7
SET NX=7
GOTO ERR
:N8
SET NX=8
GOTO ERR
:N9
SET NX=9
GOTO ERR
REM NB.TXT schreiben
:WRITENB
ECHO SA /CLS>%NBTXT%
ECHO WINDOW 1,08,12,65 LEUCHTEND GELB AUF BLAU EXPLODE>>%NBTXT%
ECHO ROWCOL 02,20 "*** ICH BIN EIN ERSATZ PRA-PC ***">>%NBTXT%
ECHO ROWCOL 04,24 "Nun bist Du gerade dabei die">>%NBTXT%
ECHO ROWCOL 05,27 "PART. LIN_%NX% zu starten.">>%NBTXT%
ECHO ROWCOL 07,24 "Wenn es die richtige Linie ist,">>%NBTXT%
ECHO ROWCOL 08,24 "druecke die Taste W.">>%NBTXT%
ECHO ROWCOL 10,24 "Die PART. LIN_%NY% kannst du starten,">>%NBTXT%
ECHO ROWCOL 11,24 "nach dem Druck auf Taste N.">>%NBTXT%
ECHO WINDOW 14,15,16,57 LEUCHTEND WEISS AUF MAGENTA>>%NBTXT%
ECHO ROWCOL 15,17 >>%NBTXT%
ECHO ASK "Deine Wahl: W [W]eiter oder N [N]euboot " NW DEFAULT=W>>%NBTXT%
ECHO ROWCOL 17,0 >>%NBTXT%
ECHO SA /CLS>>%NBTXT%
ECHO ROWCOL 1,0 >>%NBTXT%
GOTO ENDWRITENB
REM ~~~~~~~~~~~~~~~ Ende ~~~~~~~~~~~~~~~
:EOF
IF EXIST %NBTXT% DEL %NBTXT%
ECHO W (W)eiter
Grüße
Steffen
Hallo Bohu
Das > in ...
... erstellt die Datei beispiel.txt neu und schreibt
... hängt
Grüße
Steffen
Ich verstehe fast gar nichts wie es passiert
Das ist gar nicht gut! Bei allem was du nicht verstehst, solltest du fragen. Auch gerne jetzt noch.Meine Hauptfrage. In dem Script sind viele ECHOs. Ich sehe aber nichts. Läuft es so schnell?
Die ECHO-Ausgaben in den Subroutinen :CREATE und :WRITENB werden in Dateien umgeleitet. Auf diese Weise werden die Dateien LAUFW.BAS und NB.TXT erstellt. Das Prinzip ist einfach. Es gibt die Umleitungszeichen > und >>.Das > in ...
ECHO Hallo>beispiel.txt
Hallo
in die erste Zeile.ECHO Welt>>beispiel.txt
Welt
als zweite Zeile an. Bei weiteren Umleitungen mit >> werden weitere Zeilen angehängt.Grüße
Steffen
PS Kennst Du es Bitte als Erledigt markieren?
Solltest du eigentlich selber wissen das aus guten Gründen nur DU als Thread Owner dies selber machen kannst ! Sonst könnte jeder hier jegliche Threads schliessen ! Wäre ja nicht so dolle, oder ?!Einfach nur mal die FAQs lesen ! 🧐
Wie kann ich einen Beitrag als gelöst markieren?
Hallo Bohu
... einfügen. Das TYPE schreibt den Inhalt der Datei aus und das PAUSE wartet darauf dass du eine Taste drückst, bevor es weiter geht.
Und natürlich kannst du weiter Fragen stellen, wenn noch etwas unklar ist. Ich habe bereits einige Kommentare in den Code geschrieben. Wenn du dir das alles in Ruhe durchliest, erklärt sich vermutlich schon manches
Ein schönes Wochenende!
Steffen
- Um es besser zu verstehen, hätte ich es gern (provisorisch) mit Haltepunkten getrennt, um den Vorgang nachvollziehen zu können.
Werde ich die Dateien dann auch sehen und lesen können?
Natürlich. Du kannst bspw. so etwas wie ...Werde ich die Dateien dann auch sehen und lesen können?
type datei.endung
pause
UND Darf ich Dein Werk auch in dem QBasic Forum, natürlich mit Deinem Namen, präsentieren?
Gerne (auch ohne meinen Name, das ist mir nicht wichtig). Macht doch auch durchaus Sinn so etwas für die Nachwelt festzuhalten. Und du kannst auch gerne auf diesen Thread verlinken, dann sind andere in der Lage nachzuvollziehen wie das ganze zustande gekommen ist. Vielleicht bekommst du ja auch noch ein paar Anregungen für Optimierungen.Und natürlich kannst du weiter Fragen stellen, wenn noch etwas unklar ist. Ich habe bereits einige Kommentare in den Code geschrieben. Wenn du dir das alles in Ruhe durchliest, erklärt sich vermutlich schon manches
Ein schönes Wochenende!
Steffen
Hallo Bohu,
habe den Scriptcode eingekürzt (wir brauchen nur 4 und 5 zur Auswertung), dafür mehr Kommentare eingefügt.
Übrigens: lade dir mal das
Damit bekommst du auch das unix2dos Tool mitgeliefert, was dir die Zeilenumbrüche für DOS wieder in Ordnung bringt.
Einfach
in der Shell ausführen.
Grüße
Steffen
habe den Scriptcode eingekürzt (wir brauchen nur 4 und 5 zur Auswertung), dafür mehr Kommentare eingefügt.
Übrigens: lade dir mal das
dos2unix
Package auf deine Linux Distro:sudo apt install dos2unix
Einfach
unix2dos datei.endung
Grüße
Steffen
@ECHO OFF
REM Dateiname der Datei in die die Ausgabe von VOL umgeleitet wird.
SET VOLDAT=VOL.TXT
REM Konstanter Teil des Datentraegernamens, hinter dem die variable Nummer
REM (4 oder 5) zu finden ist.
SET SEARCH=LIN_
REM Dateiname des QBasic Scripts
SET SCRIPT=LAUFW.BAS
REM Dateiname des Scripts, das von BE für formatierte Aus- und Eingabe
REM genutzt wird.
SET NBTXT=NB.TXT
REM Ausgabe von VOL in Datei "VOL.TXT" umleiten.
REM "VOL.TXT" beinhaltet den Datentraegername (LIN_4 oder LIN_5) in
REM der 2. Zeile. Dieser soll von QBasic gefunden und ausgewertet werden.
VOL C:>%VOLDAT%
REM ggf. "LAUFW.BAS" erzeugen, falls noch nicht vorhanden
IF NOT EXIST %SCRIPT% GOTO CREATE
:ENDCREATE
REM QBasic ausfuehren. Das .BAS Script erstellt, je nachdem ob in VOL.TXT
REM LIN_4 oder LIN_5 gefunden wunrde, eine leere Datei "N4" oder "N5".
QBASIC /RUN %SCRIPT%
REM Von QBasic erstellte Textdatei ("N4" oder "N5") suchen
REM und entsprechende Subroutine (:N4 oder :N5) ausfuehren
REM um Variablen NX und NY mit Werten 4 und 5 bzw. 5 und 4 zu definieren.
IF EXIST N4 GOTO N4
IF EXIST N5 GOTO N5
REM Falls weder "N4" noch "N5" gefunden wurde:
ECHO Nummer nicht gefunden.
GOTO EOF
REM Die Subroutine :N4 oder :N5 springt hierhin zurueck.
:FOUND
REM Datei "N4" oder "N5" loeschen, da sie beim naechsten Ausfuehren
REM des Scripts nicht bereits vorhanden sein darf.
DEL N%NX%
REM NB.TXT unter Verwendung der Variablen NX (4 oder 5)
REM und NY (5 oder 4) neu schreiben
GOTO WRITENB
:ENDWRITENB
REM NB.TXT fuer formatierte Aus- und Eingabe verwenden
@BE %NBTXT%
REM Eingabe anhand des von BE zurueckgegebenen Errorlevelwertes
REM (1 fuer N und 2 fuer W) auswerten
REM Falls W ausgewaehlt wurde:
IF ERRORLEVEL 2 GOTO EOF
REM Falls N ausgewaehlt wurde:
ECHO N (N)euboot
CALL D:\NB\PQBOOT.EXE
GOTO EOF
REM ~~~~~~~~~~~~~~~ Subroutinen ~~~~~~~~~~~~~~~
REM Datei LAUFW.BAS schreiben.
:CREATE
ECHO ' Suchzeichenfolge vor der Nummer in der Textdatei>%SCRIPT%
ECHO s$ = "%SEARCH%">>%SCRIPT%
ECHO ' Textdatei oeffnen>>%SCRIPT%
ECHO OPEN "%VOLDAT%" FOR INPUT AS #1>>%SCRIPT%
ECHO ' erste Zeile lesen>>%SCRIPT%
ECHO LINE INPUT #1, ln$>>%SCRIPT%
ECHO ' zweite Zeile lesen (hier findet sich die Suchzeichenfolge)>>%SCRIPT%
ECHO LINE INPUT #1, ln$>>%SCRIPT%
ECHO ' Textdatei schliessen>>%SCRIPT%
ECHO CLOSE #1>>%SCRIPT%
ECHO ' Zahl nach der Suchzeichenfolge extrahieren und "N" davor setzen>>%SCRIPT%
ECHO n$ = "N" + MID$(ln$, INSTR(ln$, s$) + LEN(s$), 1)>>%SCRIPT%
ECHO ' Leere Datei mit Dateiname "N" und der Zahl erzeugen>>%SCRIPT%
ECHO OPEN n$ FOR OUTPUT AS #1>>%SCRIPT%
ECHO CLOSE #1>>%SCRIPT%
ECHO ' Script beenden>>%SCRIPT%
ECHO SYSTEM>>%SCRIPT%
GOTO ENDCREATE
REM Variablen NX und NY definieren, abhaengig von der gefundenen Datei
:N4
SET NX=4
SET NY=5
GOTO FOUND
:N5
SET NX=5
SET NY=4
GOTO FOUND
REM NB.TXT unter Verwendung der Variablenwerte in NX und NY
REM (4 und 5, oder 5 und 4) neu schreiben
:WRITENB
ECHO SA /CLS>%NBTXT%
ECHO WINDOW 1,08,12,65 LEUCHTEND GELB AUF BLAU EXPLODE>>%NBTXT%
ECHO ROWCOL 02,20 "*** ICH BIN EIN ERSATZ PRA-PC ***">>%NBTXT%
ECHO ROWCOL 04,24 "Nun bist Du gerade dabei die">>%NBTXT%
ECHO ROWCOL 05,27 "PART. %SEARCH%%NX% zu starten.">>%NBTXT%
ECHO ROWCOL 07,24 "Wenn es die richtige Linie ist,">>%NBTXT%
ECHO ROWCOL 08,24 "druecke die Taste W.">>%NBTXT%
ECHO ROWCOL 10,24 "Die PART. %SEARCH%%NY% kannst du starten,">>%NBTXT%
ECHO ROWCOL 11,24 "nach dem Druck auf Taste N.">>%NBTXT%
ECHO WINDOW 14,15,16,57 LEUCHTEND WEISS AUF MAGENTA>>%NBTXT%
ECHO ROWCOL 15,17 >>%NBTXT%
ECHO ASK "Deine Wahl: W [W]eiter oder N [N]euboot " NW DEFAULT=W>>%NBTXT%
ECHO ROWCOL 17,0 >>%NBTXT%
ECHO SA /CLS>>%NBTXT%
ECHO ROWCOL 1,0 >>%NBTXT%
GOTO ENDWRITENB
REM ~~~~~~~~~~~~~~~ Ende ~~~~~~~~~~~~~~~
:EOF
REM Ggf. NB.TXT loeschen. Sie wird nicht mehr benoetigt
REM und sowieso immer wieder neu erstellt.
IF EXIST %NBTXT% DEL %NBTXT%
ECHO W (W)eiter
Hallo Bohu
</i>
ASCII hat damit nichts zu tun. Ich habe mich auch in den Kommentaren auf ASCII Zeichen beschränkt, somit ist der Inhalt der Datei in UTF-8 derselbe wie in einer ASCII Datei. Es geht lediglich um Zeilenumbrüche die unter Linux nur aus dem Zeichen ASCII 10, unter Windows und DOS aber aus 2 Zeichen ASCII 13 und ASCII 10 bestehen. Du hast Glück, dass dein Workaround mit ASCII 8 irgendwie funktioniert.
EDIT: Hatte gerade noch das zu XED gefunden:
On the "Save as" GUI, near the bottom, select "Windows" from the "Line Ending" popup menu.
Im "Speichern unter" Menü sollte es ziemlich weit unten also ein "Zeilenende" geben, wo man "Windows" auswählen kann. Damit wäre das auch direkt in XED machbar.
Grüße
Steffen
a. Ich wollte es weiter zu geben, aber wie kann ich diesen Thread verlinken?
Einfach den Link oben aus der Adressleiste in deinem Browser herauskopieren. Sollte dieser sein:</i>
b. Weiter oben habe ich geschrieben, das ich den Code für DOS "nacharbeiten muss.
(Habe nicht erwähnt, das es "relativ" Zeit aufwendig und "Fehler-trächtig" ist.)
Vermutlich kann ich aber "nur" mein Editor nicht richtig bedienen, denn es gibt sicher eine Mögligkeit,
der Code direkt als ASCII zu speichern. Leider kann ich VIM nicht bedienen und benutze XED und/oder KATE.
Ich hatte dir oben gerade unix2dos verlinkt. Damit ist das ohne Aufwand möglich. Einfach in der Shell (sh oder bash) ausführen.(Habe nicht erwähnt, das es "relativ" Zeit aufwendig und "Fehler-trächtig" ist.)
Vermutlich kann ich aber "nur" mein Editor nicht richtig bedienen, denn es gibt sicher eine Mögligkeit,
der Code direkt als ASCII zu speichern. Leider kann ich VIM nicht bedienen und benutze XED und/oder KATE.
ASCII hat damit nichts zu tun. Ich habe mich auch in den Kommentaren auf ASCII Zeichen beschränkt, somit ist der Inhalt der Datei in UTF-8 derselbe wie in einer ASCII Datei. Es geht lediglich um Zeilenumbrüche die unter Linux nur aus dem Zeichen ASCII 10, unter Windows und DOS aber aus 2 Zeichen ASCII 13 und ASCII 10 bestehen. Du hast Glück, dass dein Workaround mit ASCII 8 irgendwie funktioniert.
EDIT: Hatte gerade noch das zu XED gefunden:
On the "Save as" GUI, near the bottom, select "Windows" from the "Line Ending" popup menu.
Im "Speichern unter" Menü sollte es ziemlich weit unten also ein "Zeilenende" geben, wo man "Windows" auswählen kann. Damit wäre das auch direkt in XED machbar.
c. Jedesmal, als Du schriebst, das DU recherchiert hast, hatte ich ein schlechtes Gewissen, den es wäre
meine Arbeit gewesen...nur...ich kann es nicht.
Die meisten Informationen findet man, wenn man gezielt nach englischem Inhalt sucht. Da gibt es aber bei vielen Leuten die Sprachbarriere ...meine Arbeit gewesen...nur...ich kann es nicht.
d. Deine Aufklärung mit dem "ECHO" in Datei umleiten fand ich SEHR GUT, aber...könnte ich es "irgendwo"
selbst nachlesen? (Um nicht "ständig" zu "nerven")?
Suche mal bei Google "Batch Echo Umleitung". Davon abgesehen sind das tatsächlich Dinge, die bis in die heutige Zeit auf fast jedem OS funktionieren (auch in der Linux Shell, kannst es testen ).selbst nachlesen? (Um nicht "ständig" zu "nerven")?
e. Habe selbst einfache Batch gemacht, die funktionieren, aber da zwischen "Syntaxfehler" "auf-blitzt".
Die Ursache finde ich aber nicht, also "lebe" ich damit. U.U. gibt dafür eine Hilfe.
Wo testest du? Unter DOS? In einem DOS Emulator? Schreib doch einfach mal den Code. Das lässt sich sicher einfach herausfinden.Die Ursache finde ich aber nicht, also "lebe" ich damit. U.U. gibt dafür eine Hilfe.
Grüße
Steffen
Hallo Bohu,
Ich hatte noch ein EDIT hinterher geschoben. Wirst du aber wahrscheinlich nicht gesehen haben.
Da bin ich leider überfragt:
Grüße
Steffen
Ich hatte noch ein EDIT hinterher geschoben. Wirst du aber wahrscheinlich nicht gesehen haben.
EDIT: Hatte gerade noch das zu XED gefunden:
On the "Save as" GUI, near the bottom, select "Windows" from the "Line Ending" popup menu.
Im "Speichern unter" Menü sollte es ziemlich weit unten also ein "Zeilenende" geben, wo man "Windows" auswählen kann. Damit wäre das auch direkt in XED machbar.
On the "Save as" GUI, near the bottom, select "Windows" from the "Line Ending" popup menu.
Im "Speichern unter" Menü sollte es ziemlich weit unten also ein "Zeilenende" geben, wo man "Windows" auswählen kann. Damit wäre das auch direkt in XED machbar.
Da bin ich leider überfragt:
- Bem. Ich habe lange gebraucht, damit die zweite Partition auch bootfähig war, denn wenn die erste Partition zu groß ist, sind die weiteren primären nicht mehr bootfähig. Ob man so etwas simulieren kann?
Grüße
Steffen
Hallo Bohu,
hast du Lust noch mal zu probieren, ob wir gänzlich auf QBasic verzichten können?
Ich weiß dass das FIND Kommando unter DOS existiert, mit dem eine Zeichenfolge (wie LIN_4 oder LIN_5) in einer Datei gefunden werden kann. Unter Windows setzt FIND den Errorlevel auf 1, falls die Zeichenfolge nicht gefunden wird. Ob das unter DOS schon der Fall war, konnte ich nicht herausfinden. Aber einen Versuch ist es wert ...
Grüße
Steffen
hast du Lust noch mal zu probieren, ob wir gänzlich auf QBasic verzichten können?
Ich weiß dass das FIND Kommando unter DOS existiert, mit dem eine Zeichenfolge (wie LIN_4 oder LIN_5) in einer Datei gefunden werden kann. Unter Windows setzt FIND den Errorlevel auf 1, falls die Zeichenfolge nicht gefunden wird. Ob das unter DOS schon der Fall war, konnte ich nicht herausfinden. Aber einen Versuch ist es wert ...
Grüße
Steffen
@ECHO OFF
REM Dateiname der Datei in die die Ausgabe von VOL umgeleitet wird.
SET VOLDAT=VOL.TXT
REM Konstanter Teil des Datentraegernamens, hinter dem die variable Nummer
REM (4 oder 5) zu finden ist.
SET SEARCH=LIN_
REM Dateiname des Scripts, das von BE für formatierte Aus- und Eingabe
REM genutzt wird.
SET NBTXT=NB.TXT
REM Ausgabe von VOL in Datei "VOL.TXT" umleiten.
REM "VOL.TXT" beinhaltet den Datentraegername (LIN_4 oder LIN_5)
VOL C:>%VOLDAT%
REM LIN_4 oder LIN_5 mittels FIND Kommando in "VOL.TXT" suchen.
REM Das FIND Kommando setzt ERRORLEVEL zu 1 wenn die Suchzeichenfolge
REM nicht gefunden wurde. Geprueft wird also, ob ERRORLEVEL nicht 1 ist,
REM um herauszufinden ob die Suchzeichenfolge gefunden wurde und in die
REM entsprechende Subroutine :N4 oder :N5 zu springen.
FIND "%SEARCH%4" %VOLDAT% >NUL
IF NOT ERRORLEVEL 1 GOTO N4
FIND "%SEARCH%5" %VOLDAT% >NUL
IF NOT ERRORLEVEL 1 GOTO N5
REM Falls weder LIN_4 noch LIN_5 gefunden wurde:
ECHO Nummer nicht gefunden.
PAUSE
GOTO EOF
REM Die Subroutine :N4 oder :N5 springt hierhin zurueck.
:FOUND
REM NB.TXT unter Verwendung der Variablen NX (4 oder 5)
REM und NY (5 oder 4) neu schreiben
GOTO WRITENB
:ENDWRITENB
REM NB.TXT fuer formatierte Aus- und Eingabe verwenden
@BE %NBTXT%
REM Eingabe anhand des von BE zurueckgegebenen Errorlevelwertes
REM (1 fuer N und 2 fuer W) auswerten
REM Falls W ausgewaehlt wurde:
IF ERRORLEVEL 2 GOTO EOF
REM Falls N ausgewaehlt wurde:
ECHO N (N)euboot
CALL D:\NB\PQBOOT.EXE
GOTO EOF
REM ~~~~~~~~~~~~~~~ Subroutinen ~~~~~~~~~~~~~~~
REM Variablen NX und NY definieren, abhaengig von der gefundenen Zeichenfolge
:N4
SET NX=4
SET NY=5
GOTO FOUND
:N5
SET NX=5
SET NY=4
GOTO FOUND
REM NB.TXT unter Verwendung der Variablenwerte in NX und NY
REM (4 und 5, oder 5 und 4) neu schreiben
:WRITENB
ECHO SA /CLS>%NBTXT%
ECHO WINDOW 1,08,12,65 LEUCHTEND GELB AUF BLAU EXPLODE>>%NBTXT%
ECHO ROWCOL 02,20 "*** ICH BIN EIN ERSATZ PRA-PC ***">>%NBTXT%
ECHO ROWCOL 04,24 "Nun bist Du gerade dabei die">>%NBTXT%
ECHO ROWCOL 05,27 "PART. %SEARCH%%NX% zu starten.">>%NBTXT%
ECHO ROWCOL 07,24 "Wenn es die richtige Linie ist,">>%NBTXT%
ECHO ROWCOL 08,24 "druecke die Taste W.">>%NBTXT%
ECHO ROWCOL 10,24 "Die PART. %SEARCH%%NY% kannst du starten,">>%NBTXT%
ECHO ROWCOL 11,24 "nach dem Druck auf Taste N.">>%NBTXT%
ECHO WINDOW 14,15,16,57 LEUCHTEND WEISS AUF MAGENTA>>%NBTXT%
ECHO ROWCOL 15,17 >>%NBTXT%
ECHO ASK "Deine Wahl: W [W]eiter oder N [N]euboot " NW DEFAULT=W>>%NBTXT%
ECHO ROWCOL 17,0 >>%NBTXT%
ECHO SA /CLS>>%NBTXT%
ECHO ROWCOL 1,0 >>%NBTXT%
GOTO ENDWRITENB
REM ~~~~~~~~~~~~~~~ Ende ~~~~~~~~~~~~~~~
:EOF
REM Ggf. NB.TXT loeschen. Sie wird nicht mehr benoetigt
REM und sowieso immer wieder neu erstellt.
IF EXIST %NBTXT% DEL %NBTXT%
ECHO W (W)eiter
Hallo Bohu,
wir haben ja Zeit. Danke trotzdem für die Rückmeldung.
Du siehst, ich versuche mich gedanklich gerade 30 Jahre zurück zu versetzen. Aber sich da noch an Details zu erinnern, ist nicht so einfach. Natürlich könnte ich einen DOS Emulator, wie bspw. DosBox nutzen. Der versucht aber lediglich das Verhalten der command.com nachzuahmen (mit unvollständigem Befehlssatz und nicht immer genauso wie beim Original). Das hilft nicht bei solchen Detailfragen. Da benötigt man das echte OS mit den echten Kommando-Tools.
Grüße
Steffen
wir haben ja Zeit. Danke trotzdem für die Rückmeldung.
Du siehst, ich versuche mich gedanklich gerade 30 Jahre zurück zu versetzen. Aber sich da noch an Details zu erinnern, ist nicht so einfach. Natürlich könnte ich einen DOS Emulator, wie bspw. DosBox nutzen. Der versucht aber lediglich das Verhalten der command.com nachzuahmen (mit unvollständigem Befehlssatz und nicht immer genauso wie beim Original). Das hilft nicht bei solchen Detailfragen. Da benötigt man das echte OS mit den echten Kommando-Tools.
Grüße
Steffen
Hallo Bohu,
gut zu hören. Ohne QBasic könnte es nun auch etwas schneller sein.
Grüße
Steffen
gut zu hören. Ohne QBasic könnte es nun auch etwas schneller sein.
Ich hoffe sehr, das Du ohne mich "lange Weile" hast.
Es ist sehr interessant, wieder mal "um die Ecke" zu denken, um irgend etwas unter DOS zum Laufen zu bringen. Hauptsächlich bastle ich sonst an C und C++ Algorithmen wenn ich am Rechner sitze. Aber mein Angebot, weiter Fragen zu stellen, gilt Grüße
Steffen
Hallo Bohu,
Grüße
Steffen
- Gibt es eine Mögligkeit um "Entwürfe" / letzte "Schritte" sehen zu können?
Ich glaube nicht. Wenn du ein instabiles Internet hast und es länger dauert Antworten zu schreiben - Tipp: Schreibe einfach erst mal ganz entspannt in deinen Texteditor und kopiere dort raus wenn du fertig bist.- Eine "hypothetische" Frage.
Wäre es sehr kompliziert, in der NB.TXT Datei "nur" die Werte zu ändern,
statt sie neu zu schreiben?
Theoretisch geht das, wenn sich die Anzahl der Zeichen in der Datei dabei nicht ändert. Das geht aber nur auf binärer Ebene (Bytes im Datei-Stream an einer bestimmten Stelle durch gleiche Anzahl Bytes ersetzen). Batch bietet dafür keine Möglichkeit (in C geht das). Darüber hinaus ist es in den meisten Fällen wesentlich einfacher die Datei einfach neu zu schreiben.Wäre es sehr kompliziert, in der NB.TXT Datei "nur" die Werte zu ändern,
statt sie neu zu schreiben?
PS Ich habe schon vielmals mit C Begonnen, aber bleibe schon bei Datentypen hängen. ;-(
Mein "letztes" Werk: "C-HowTo" von Elias Fischer. Bin auf Seite 34. (Seit über einem Jahr.)
Dann fängst du zumindest schon mal besser an als ich. Ich hatte vor ~15 Jahren einfach gestartet damit zu spielen und mich nach dem Prinzip "Versuch und Irrtum" durchgehangelt. Ich hatte keine Ahnung was der Unterschied zwischen C, C++ und der Windows API ist und einen furchtbaren Mix zusammen geschrieben, weil sie zum Teil untereinander kompatibel sind. Nur durch striktes Nachlesen im Internet habe ich langsam ein Verständnis aufgebaut. Mit einem Buch wäre das sicher zehnmal schneller gegangen Mein "letztes" Werk: "C-HowTo" von Elias Fischer. Bin auf Seite 34. (Seit über einem Jahr.)
Grüße
Steffen
Hallo Bohu
Grüße
Steffen
Zu der Text Datei. Ich dachte, das man dort Deine Variable schon haben könnte, z.B. %SEARCH%%NX%.
So etwas wie %VARIABLENNAME%
gehört zur Batch Syntax und nur der Kommandozeileninterpreter weiß, dass er die Zeichenfolge in Prozentzeichen durch den Wert einer Umgebungsvariablen ersetzen soll. Ich habe keine Ahnung ob das BE Tool das du nutzt, irgendeine Syntax versteht um eine Zeichenfolge in der Textdatei durch eine Umgebungsvariable zu ersetzen. Gibt es irgendwo eine Erklärung/Hilfe wie dieses Tool funktioniert?Hätte ich nie gedacht, das Du erst vor 15 Jahren und als Autodidakt begonnen hast
Naja, Autodidakt ist in jedem Fall richtig. Vor 15 Jahren habe ich mit C begonnen. Aber meine ersten Gehversuche mit Programmierung waren tatsächlich mit BASIC in den späten 80ern. Damals noch auf einem "KC85" (dem "C64" der DDR, mit handelsüblichem Kassettenrekorder als "Laufwerk").a. Wie groß darf/soll eine Batch sein, um sie hochladen zu können?
Ich glaube nicht dass du Dateien hochladen kannst. Du kannst Code nur in den Beitrag kopieren.b. Soll man das "Ganze Projekt" oder nur Teile davon hochladen?
Gute Frage. Ich finde folgende Herangehensweise gut:Zitat von Bjarne Stroustrup:
"Finding the smallest program that demonstrates the error" is a powerful debugging tool.
Es macht Sinn dein Problem in einen nicht allzu langen, aber lauffähigen Beispielcode zu packen, der den Fehler zeigt. Dann noch eine kurze Erklärung was du bekommst (Fehlermeldung, falsche Ausgabe, Crash etc.) und was du statt dessen erwartest wenn der Code fehlerfrei laufen würde."Finding the smallest program that demonstrates the error" is a powerful debugging tool.
Grüße
Steffen