![Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht](misc/logos/logo.png) |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
bm-magic
Anmeldungsdatum: 28.02.2013 Beiträge: 37
|
Verfasst am: 10.03.2022, 01:13 Titel: Lauwerkname verwenden. Aber wie? |
|
|
Bin 76 Jahre "jung", verstehe nichts von Basic und bitte um eine Hilfe.
Habe mehrere "fast" gleiche primäre c:\ Partitionen (mit unterschiedlichem Label), die man über PQBOOT.EXE anwählen kann.
- Ich möchte nach dem Booten auf Bildschirm eine Textdatei ausgeben mit unterschiedlichem Inhalt. Die Steuerdateien sind auf auf eine erweiterte Partition d:\.
- Bis jetzt schaffte ich, (voller Stolz) eine Boot.bat Datei mit dem Inhalt:
VOL C: >Lin.txt herzustellen. Die Antwort ist aber zu lang:
------------------------------------------------------
Datenträger in Laufwerk C: ist Win_7
Volumeseriennummer: 9AAC-306B
------------------------------------------------------
Ich möchte aber nur den Label als ENVIRON$("VOL") verwenden.
Bitte um Hilfe. |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1215 Wohnort: Ruhrpott
|
Verfasst am: 10.03.2022, 18:44 Titel: |
|
|
Hallo bm-magic,
wenn ich dich richtig verstanden habe, möchtest du die Volumeseriennummer als Umgebungsvariable setzen, um unterscheiden zu können, in welcher der Installationen du dich gerade befindest.
Am einfachsten dürfte es sein, diese Variable in jeder Installation einmalig von Hand zu setzen, siehe
https://www.windows-faq.de/2017/07/10/windows-umgebungsvariablen-benutzerdefiniert-systemvariablen-bearbeiten/.
Da jede Windows - Installation ihre eigene Registry hat, wird auch jedesmal die zugehörige Umgebungsvariable angezeigt.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
bm-magic
Anmeldungsdatum: 28.02.2013 Beiträge: 37
|
Verfasst am: 11.03.2022, 02:36 Titel: |
|
|
@grindstone,
vielen Dank für Deine Antwort. Vermutlich habe ich mein Problem nicht richtig beschrieben. Ich möchte beim Booten die gestartete Partition identifizieren.
Ich benutze als OS DOS und nicht Windows. Die VOL Anzeige ist aber die gleiche.
Meine provisorische Lösung sieht vorlegend aus:
- In den Autoexec.bat habe ich hinzugefügt:
Code: | @PATH ;D:\NB;
@SET NB=P1 und SET=P2 (je nach Partition)
@CALL D:\NB\NB
|
- Auf LW D:\NB\ sind vorhanden:
1. NB.BAT mit dem Inhalt:
Code: | IF %NB%==P1 GOTO PART_1
IF %NB%==P2 GOTO PART_2
IF NOT EXIST %NB% GOTO FEHLER
:PART_1
COPY D:\NB\NB1.txt NB.txt
GOTO WEITER
:PART_2
COPY D:\NB\NB2.txt 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
ECHO N (N)euboot
CALL D:\NB\PQBOOT.EXE
GOTO ENDE
:ENDE
ECHO W (W)eiter
@ECHO OFF
ECHO Ende der Stapeldatei NEUBOOT.BAT
|
2. NB1.txt Datei mit dem Inhalt:
Code: |
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
|
3. NB2.txt Datei mit dem gleichen Inhalt nur die Bezeichnungen sind getauscht.
4. PQBOOT.EXE (Das ist ein Powerquest Programm der nach Vorwahl
eine Partition Bootet.)
Nach dem Aufruf wird gebildet:
5. NB.TXT Datei mit dem Inhalt der gebotenen Partition.
Leider funktioniert der Text wechsel NUR beim Aufruf aus laufendem Umgebung.
Bei dem Aufruf aus der autoexec.bat bleibt der "letzter" NB.txt vorhanden.
Beim Auruf von SET und Return Ist das RICHTIGE NB=PX angezeigt, aber
die Datei NB.TXT wird leider NICHT überschrieben!
Ich wollte mein Entwurf "automatisieren" und zum Laufen zu bringen.
Ich hoffe immer noch auf Hilfe. |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
bm-magic
Anmeldungsdatum: 28.02.2013 Beiträge: 37
|
Verfasst am: 11.03.2022, 04:45 Titel: |
|
|
Nachtrag,
es ist so deprimierend, wenn es nicht funktioniert, wie man möchte!
-Ich glaube, das es vor 20 Jahren nicht passiert wäre.
Die NB.BAT funktioniert nun.
- Ich hatte zwei "Leichtsingfehler" behoben.
1. Die NB.TXT Datei nicht zu Löschen.
2. Dem Pfad im Zielverzeichnis nicht eindeutig bestimmt.
(Habe nämlich die NB.TXT im Stammverzeichnis gefunden.)
Die "neue" NB.BAT sieht nun so aus: Code: | echo off
cls
IF %NB%==P1 GOTO PART_1
IF %NB%==P2 GOTO PART_2
IF NOT EXIST %NB% GOTO FEHLER
:PART_1
DEL D:\NB\NB.TXT
COPY D:\NB\NB1.TXT D:\NB\NB.TXT
GOTO WEITER
:PART_2
DEL D:\NB\NB.TXT
COPY D:\NB\NB2.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 |
Damit ist der "Entwurf" erfolgreich, löst aber meine Frage nicht.
Ich hätte es lieber mit VOL im SET automatisiert und hoffe auf eine Hilfe. |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1215 Wohnort: Ruhrpott
|
Verfasst am: 11.03.2022, 18:12 Titel: |
|
|
Ich weiss nicht, wie das bei DOS ist, bei Windows lässt sich eine Umgebungsvariable nur direkt im Konsolenfenster setzen (eintippen per Hand), ein entsprechender Befehl in einer Batch-Datei wird nicht ausgeführt.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
dreael Administrator
![](images/avatars/112279543641421ec80e8e2.gif)
Anmeldungsdatum: 10.09.2004 Beiträge: 2509 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 11.03.2022, 22:46 Titel: |
|
|
In Windows besitzt die CMD.EXE haufenweise Erweiterungen, damit programmiertechnisch Dinge wie Datei zeilenweise lesen o.ä. sogar möglich sind. Dagegen in MS-DOS 6.22 sind die Batch-Programmiermöglichkeiten nur sehr rudimentär.
Evtl. würde ich (passend für dieses Forum) ein kleines QB-Programm schreiben der Art
Code: |
' LIESVOL.BAS - Entwurf - nicht getestet!
laufwerk$ = "C:"
SHELL "vol " + laufwerk$ + " >" + ENVIRON$("TEMP") + "\~VOL.TXT"
OPEN ENVIRON$("TEMP") + "\~VOL.TXT" FOR INPUT AS 1
WHILE NOT EOF(1)
LINE INPUT#1, z$
IF LEFT(z$, 7) = "Datentr" THEN
Label$ = RIGHT$(z$, LEN(z$) - INSTR(z$, " ist ") + 1)
END IF
WEND
CLOSE 1
KILL ENVIRON$("TEMP") + "\~VOL.TXT"
' Kleine .BAT für CALL generieren
OPEN ENVIRON$("TEMP") + "\~SETVOL.BAT" FOR OUTPUT AS 1
PRINT#1, "SET VOL=" + Label$
CLOSE 1
SYSTEM
|
Und Dein Batch sollte ungefähr so aussehen:
Code: |
REM boot.bat
QBASIC /run LIESVOL.BAS
CALL %TEMP%\~SETVOL.BAT
DEL %TEMP%\~SETVOL.BAT
ECHO Und hier etwas mit dem Volume Label tun: %VOL%
|
Das mit der temporären Batchdatei ist wegen der Vater/Kindprozess-Probolematik noch wichtig. Oder anders herum: Im Kindprozess gesetzte Umgebungsvariablen gehen beim Beenden des Kindprozesses verloren. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
bm-magic
Anmeldungsdatum: 28.02.2013 Beiträge: 37
|
Verfasst am: 12.03.2022, 06:09 Titel: |
|
|
@dreael, DANKE, ich habe es WIRKLICH Versucht, aber...
die BAS bleibt stehen beim ("TEMP") mit dem Meldung:
Ende der Anweisung erwartet.
- Ich habe versucht es in der Hilfe zu lokalisieren, aber ich finde nicht der Einstieg.
Wo soll ich suchen? |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1215 Wohnort: Ruhrpott
|
Verfasst am: 12.03.2022, 17:08 Titel: |
|
|
Wenn ich mich recht entsinne, werden bei DOS die Umgebungsvariablen in der AUTOEXEC.BAT festgelegt. Für das dauerhafte Setzen einer neuen Umgebungsvariable scheint es mir am erfolgversprechdsten, diese Datei um die gewünschte Variable zu erweitern und dann den Rechner neu zu booten.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
bm-magic
Anmeldungsdatum: 28.02.2013 Beiträge: 37
|
Verfasst am: 12.03.2022, 18:43 Titel: |
|
|
@grindstone, natürlich hast Du recht...und so ist es auch realisiert und es funktioniert.
- Aber...ich hätte es gern "Renoviert" und dabei etwas gelernt.
Ich hätte gern gewusst, wie man der Inhalt einer *.txt Datei verändern kann.
Habe gleich zwei Dateien dazu:
a. Mit dem Kommando VOL C: >vol.txt Datei mit dem Inhalt: Code: | Datenträger in Laufwerk C: ist PART_1
Volumeseriennummer: 9AAC-306B |
Hier hätte ich gern, alle Zeichen bis auf die 1 im PART_1 gelöscht.
- Das Resultat, also die 1 dann im SET NB=x einsetzen zu können.
b. Eine NB.txt Datei in der ich "NUR" die aktuelle Ergebnisse NB=x
1. in der Zeile 5 nach PART. einsetze und
2. In der Zeile 8 nach PART. (je nach Größe) inkrementiere/dekrementiere.
Und dazu benötige ich LEIDER Hilfe.
PS. Es handelt sich also um mehrere Aufgaben.
Ich wäre natürlich mit der Hilfe zu irgendeiner Teilaufgabe glücklich. |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
St_W
![](images/avatars/106287718549fca05d5271f.jpg)
Anmeldungsdatum: 22.07.2007 Beiträge: 949 Wohnort: Austria
|
Verfasst am: 12.03.2022, 23:27 Titel: |
|
|
Ich weiß, das war nicht deine Frage, aber ich wollte gern darauf hinweisen, dass man mit DOS 6 (und neuer) ein einfaches Startmenü erstellen kann:
https://www.i8086.de/dos-befehle/mehrfachkonfiguration.html
Ich hatte sowas damals eingerichtet für verschiedene DOS Konfigurationen, man kann das aber z.B. auch für die Auswahl der Partition verwenden, die du dann entsprechend per PQBOOT auswählen kannst (wobei ich annehme dass du die zur Verfügung stehenden Partitionsnamen schon vorher kennst und fix hinterlegen kannst). _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
bm-magic
Anmeldungsdatum: 28.02.2013 Beiträge: 37
|
Verfasst am: 13.03.2022, 02:08 Titel: |
|
|
@St-W, ich habe mich Deine Seite angesehen, sie sieht schön aus. Leider fand ich
dort keine Information zu meine Problemen.
- Ich bin "natürlich" die ganze Zeit mit Lösungen beschäftigt und habe, zu erst in Windows,
einen "Hauch" für den ersten Teilproblem gefunden.
Das Original:
Code: | etlocal enableDelayedExpansion
for /F "tokens=*" %%L in (datei.txt) do (
set "line=%%L"
set "line=!line:suchString=ersetzString!"
echo.!line!
)
>>"%TMP%\tmpOutput[%~n0].txt"
del "datei.txt"
copy "%TMP%\tmpOutput[%~n0].txt" "datei.txt" |
habe ich umgebaut in:
Code: | setlocal enableDelayedExpansion
for /F "tokens=*" %%L in (vol.txt) do (
set "line=%%L"
set "line=!line:Win_7=DOS_1!"
echo.!line!
)
>>"%TMP%\tmpOutput[%~n0].txt"
del "datei.txt"
copy "%TMP%\tmpOutput[%~n0].txt" "vol.txt" |
Und ich bekomme die Antwort:
Code: | F:\Neu>volneu
F:\Neu>setlocal enableDelayedExpansion
F:\Neu>for /F "tokens=*" %L in (vol.txt) do (
set "line=%L"
set "line=!line:Win_7=DOS_1!"
echo.!line!
)
F:\Neu>(
set "line=Datenträger in Laufwerk C: ist Win_7"
set "line=!line:Win_7=DOS_1!"
echo.!line!
)
Datenträger in Laufwerk C: ist DOS_1
F:\Neu>(
set "line=Volumeseriennummer: 9AAC-306B"
set "line=!line:Win_7=DOS_1!"
echo.!line!
)
Volumeseriennummer: 9AAC-306B
Syntaxfehler.
F:\Neu>>>"C:\Temp\tmpOutput[volneu].txt"
F:\Neu> |
Was habe ich Falsch gemacht?
PS. Das Original Text von vol.txt ist ähnlich, wie in der votherigen Nachricht. |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1215 Wohnort: Ruhrpott
|
Verfasst am: 13.03.2022, 18:48 Titel: |
|
|
Zumindest für das Herausschneiden der Partitionsnummer gibt es eine einfache QB-Lösung: Code: | 'Erzeugen einer Beispieldatei
Open "e:\vol.txt" For Output As #1
Print #1, "Datenträger in Laufwerk C: ist PART_1"
Print #1, "Volumeseriennummer: 9AAC-306B"
Close #1
'Isolieren der Partitionsnummer
Open "e:\vol.txt" For Input As #1
Line Input #1, g$
g$ = Mid$(g$, InStr(g$, "PART_") + 5, 1)
Close #1
? g$
Sleep |
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
bm-magic
Anmeldungsdatum: 28.02.2013 Beiträge: 37
|
Verfasst am: 31.03.2022, 21:44 Titel: |
|
|
@ alle,
vielen Dank für die Hilfe.
Mein "Traum" wurde gelöst.
Die "Entstehung" kann man verfolgen auf:
https://administrator.de/forum/wie-setzt-man-vol-als-set-ein-2125519844.html
Auf der Seite ist auch Lösung mit QBasic.
Für diejenigen, die nicht so viel Zeit haben, sieht die Lösung folgend aus:
Code: | @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%
SET VOLDAT=
SET SEARCH=
SET NBTXT=
SET NY=
ECHO W (W)eiter
|
Es funktioniert sehr gut.
Der Vorteil, gegen meiner Lösung ist, das man keine Partition spezifische Autoexec.bat
benötigt.
Noch einmal vielen Dank an @rubberman. |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
|
|
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.
|
|