Umrandung in einer Batchdatei schließen, auch beim Befel set
hello @ all!
ich habe mir ein kleines programm geschrieben um meine musik datein leichter zu finden und abzuspielen, jetzt wollte ich die oberfläche verbessern, doch ich habe ein kleines problem.
hey also mein problem schaut so aus:
ich habe also mir einmal so eine schöne oberflöche gestalltet, das sieht so aus:
wenn ich jetzt etwas eingebe verändert es sich so:
meine frage ist jetzt, wie bekomme ich auch rechts so eine umrandung hin?
ich danke jetzt schon für antworten
MFG alexander
PS: wenn das gelöst ist, habe ich schon eine weitere aufgabe :P
ich habe also mir einmal so eine schöne oberflöche gestalltet, das sieht so aus:
wenn ich jetzt etwas eingebe verändert es sich so:
meine frage ist jetzt, wie bekomme ich auch rechts so eine umrandung hin?
ich danke jetzt schon für antworten
MFG alexander
PS: wenn das gelöst ist, habe ich schon eine weitere aufgabe :P
Please also mark the comments that contributed to the solution of the article
Content-Key: 146759
Url: https://administrator.de/contentid/146759
Printed on: April 19, 2024 at 00:04 o'clock
29 Comments
Latest comment
moin,
oberflächlich gesehen - schreibt man schöne gui nicht in Batch, da eignen sich andere werkzeuge besser.
Gruß
PS:
btw: Tipps die zur Fehleranalyse oder Erweiterung selbst gezimmerter Tools dienen, immer am besten mit dem Teil des Tools posten, um das es geht. Und Ross & Reiter gilt eigentlich auch für dein Problem, sonst nehmen wir an, du hast Dos 6.22. oder W98se
23:20 Daffman ist schon wieder weg, die Frisur sitzt, ein Bier braucht auch 7 minuten und nicht 4
oberflächlich gesehen - schreibt man schöne gui nicht in Batch, da eignen sich andere werkzeuge besser.
- autoit
- gtk
- vbs
- xyz
Gruß
PS:
PS: wenn das gelöst ist, habe ich schon eine weitere aufgabe :P
Ist das eine Drohung, oder ein Versprechen?btw: Tipps die zur Fehleranalyse oder Erweiterung selbst gezimmerter Tools dienen, immer am besten mit dem Teil des Tools posten, um das es geht. Und Ross & Reiter gilt eigentlich auch für dein Problem, sonst nehmen wir an, du hast Dos 6.22. oder W98se
23:20 Daffman ist schon wieder weg, die Frisur sitzt, ein Bier braucht auch 7 minuten und nicht 4
ok, das ist kein Dos, ich liebe meine Frau und mein Kind, Scripte naja die mag ich
zur sicherheit: ich habe XP und das ist die Eingabeaufforderung!
es sollte eher hilferuf sein und keine drohung ich dachte nur, ob jemand wüsste, wie ich einen "find" befehl
auch so einkasteln könnte.
es sollte eher hilferuf sein und keine drohung ich dachte nur, ob jemand wüsste, wie ich einen "find" befehl
auch so einkasteln könnte.
Also mit Find würde ich da nix rumstricken und ehrlich das wird nix - such dir die drei von mir genannten genausofreien Lösungen mal an, die sind schön. Das schöne an batch und co ist - das man es im hintergrund machen kann.
MFG Alexander
Ps: evtl hast du meinen Text nicht ganz gelesen und dir damit die Chance genommen, jetzt ein kleines Scriptchen in irgendeiner "Sprache " für dein Problemchen zu kriegen, von dem ich dir garantiere, dass es schneller und schöner aussieht, als es ein Batch jemals kann - denn dafür ist Batch nicht gemacht.
23:45 Das Wetter passt und Duffman sitzt neben Homer bei Moe, bei den Admins ist er wieder weg. Q&D
Zitat von @60730:
oberflächlich gesehen - schreibt man schöne gui nicht in Batch, da eignen sich andere werkzeuge besser.
Moin Timo,oberflächlich gesehen - schreibt man schöne gui nicht in Batch, da eignen sich andere werkzeuge besser.
aber Schönheit liegt doch im Auge des Betrachters
Und auch Batche kann man mit HOrst Schaeffers Wbat schön(er) machen.
(läuft aber als 16-bit Anwendung nicht auf 64-Bit Windows-Versionen)
Ansonsten halte ich vom Kästchen(-Denken) des OP überhaupt nichts
Gruß
LotPings
Hallo Alexander,
muss meinen Vorrednern schon Recht geben. Und wenn du deinen Quellcode gepostet hättest, würdest du uns die Beantwortung deiner Frage auch etwas erleichtern.
Aber zu deinem Problemchen:
Wenn du mittels nativem Batch die Lücke schließen willst, hast du keine andere Chance, als die Anzeige zu löschen und neu zu schreiben. Dabei musst du deine Eingabe zu einem String mit fixer Länge verarbeiten (macht in meinem Beispiel die Funktion :addspaces).
Guckst du hier
Grüße
rubberman
muss meinen Vorrednern schon Recht geben. Und wenn du deinen Quellcode gepostet hättest, würdest du uns die Beantwortung deiner Frage auch etwas erleichtern.
Aber zu deinem Problemchen:
Wenn du mittels nativem Batch die Lücke schließen willst, hast du keine andere Chance, als die Anzeige zu löschen und neu zu schreiben. Dabei musst du deine Eingabe zu einem String mit fixer Länge verarbeiten (macht in meinem Beispiel die Funktion :addspaces).
Guckst du hier
@echo off &setlocal &mode con cols=70 lines=100 &title Musik finden
call :top
set /p "input= º "
call :addspaces "%input%" 65 r output
set "output= º %output%º"
cls
call :top
echo %output%
call :bottom
pause
goto :eof
:: ~~~~~~~~~~~ Subroutinen: ~~~~~~~~~~~
:top
echo.
echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo º º
echo º Musiktitel oder Interpreten eingeben º
echo º º
goto :eof
:bottom
echo º º
echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
goto :eof
:addspaces
:: syntax:
:: addspaces String AnzahlZeichen Richtung[r/l] Variablenname
setlocal
for /l %%i in (1,1,%~2) do (
call set "spaces= %%spaces%%"
)
if /i "%~3"=="r" (
set "string=%~1%spaces%"
call set "string=%%string:~,%~2%%
) else (
set "string=%spaces%%~1"
call set "string=%%string:~-%~2%%
)
endlocal&set "%~4=%string%"
goto :eof
Grüße
rubberman
Moin Daffman,
Das liegt daran, dass die in der ersten Zeile gesetzte Zeilenanzahl (cols=71 oder cols=75 oder whatever) natürlich ihre Abhängigkeiten weiter unten im Programmfluss hat.
Steht doch da..
Grüße
Biber
Das liegt daran, dass die in der ersten Zeile gesetzte Zeilenanzahl (cols=71 oder cols=75 oder whatever) natürlich ihre Abhängigkeiten weiter unten im Programmfluss hat.
- Entweder du setzt die EINMAL als Wert und setzt alle sich daraus ergebenden Werte "berechnend"
- oder du musst eben, wenn du "mode con cols" um 5 verminderst auch den Parameter "Spaltenbreite" in diesem ":Addspaces"-Block um 5 vermindern.
Steht doch da..
Grüße
Biber
@ Biber.
Das kann nicht die Ursache sein, denn die Spaltenanzahl wurde ja von 70 auf 71/75 erweitert (und nicht verringert!).
Wäre sie verringert worden, würde der Zeilenumbruch in der Anzeige in die nächste Zeile rutschen. Die Erscheinung ist aber dass "der Strich zu weit rechts" steht
@ Alex
Welcher Strich ist zu weit rechts? Der rechte oder der linke? Und wann, bei der Eingabe oder danach?
Wenn es der rechte ist, dann musst du beim Aufruf von :addspaces die 65 um die entsprechende Anzahl vermindern.
Wenn es der linke ist, hast du ein Space zu viel bei set /p "input=..." oder set "output=...".
Grüße
rubberman
Das kann nicht die Ursache sein, denn die Spaltenanzahl wurde ja von 70 auf 71/75 erweitert (und nicht verringert!).
Wäre sie verringert worden, würde der Zeilenumbruch in der Anzeige in die nächste Zeile rutschen. Die Erscheinung ist aber dass "der Strich zu weit rechts" steht
@ Alex
Welcher Strich ist zu weit rechts? Der rechte oder der linke? Und wann, bei der Eingabe oder danach?
Wenn es der rechte ist, dann musst du beim Aufruf von :addspaces die 65 um die entsprechende Anzahl vermindern.
Wenn es der linke ist, hast du ein Space zu viel bei set /p "input=..." oder set "output=...".
Grüße
rubberman
[OT]
SCRN
Lösch ich nachher wieder....
Biber
[Edit]
[/OT]
Zitat von @Daffman:
sry dass ich erst jetzt schreibe, war in koebenhavn!
also das mit dem strich habe ich selbst lösen können, langsam verstehe ich es :P
Auf welchem Strich in koebenhavn warst du denn?sry dass ich erst jetzt schreibe, war in koebenhavn!
also das mit dem strich habe ich selbst lösen können, langsam verstehe ich es :P
SCRN
Lösch ich nachher wieder....
Biber
[Edit]
brauchst du nicht löschen - ist nur ein zeugnis deiner infantilität
Erwischt... woher weiss er bloss von meiner Vorliebe für Minderjährige..??[/OT]
Zitat von @Daffman:
hierbei will ich, dass die datei eben die zahlen runterzählt, die eine sekunden angabe sein sollen. doch wenn set /a
sec=%noch%*20 180 bzw 160 ergibt, bricht die datei ab. danach geht es wieder. woran kann das liegen??
hierbei will ich, dass die datei eben die zahlen runterzählt, die eine sekunden angabe sein sollen. doch wenn set /a
sec=%noch%*20 180 bzw 160 ergibt, bricht die datei ab. danach geht es wieder. woran kann das liegen??
Moin,
naja - meine Vorliebe für Problembatche - die ein führendes @echo off haben - wird wohl mal auf meinem Grabstein stehen....
Nun ist die Axt aus dem Binärwald die - @echo off in Testscripte hasste - wie die Pest
steif und kalt unter diesem Stein - mögen die Betatestscriptschreiber gnädig sein
Und immer dran denken - er hasste das nicht allein...
2
2
2
2
2
Ungültige Zahl. Nummerische Konstanten sind entweder dezimale (17),
hexadezimale (0x11) oder oktale (021) Zahlen.
0
Ungültige Zahl. Nummerische Konstanten sind entweder dezimale (17),
hexadezimale (0x11) oder oktale (021) Zahlen.
0
01
01
01
0
0
0
0
0
123
Übrigens muß man deinen Umbau schon vorher etwas anpassen...
Warum der Gummiman die Zeilen 38 und ff s0o gestrickt hat und nicht so wie du, könnte dieses Rätsel lösen, das andere siehe oben.
ich hoffe, ich quäle - langweile - euch nicht,
Und ich danke dir für deine Hausaufgabe, die ich dir etwas Licht ins dunkle liefert, soll dir ja nicht langweilig werden und du sollst das ja auch verstehen.Gruß
Das ist ja nett,
alle Leute die bei einer Suche nach ähnlichen Lösungen diesen Beitrag finden,
dürfen sich/dich dann Fragen was für eine Lösung das ist ?
Findest du das, nachdem sich doch einige Leute Mühe gegeben haben dir zu helfen,
nicht ein wenig Egozentrisch?
Gruß
LotPings
@Biber, vielleicht ja auch nur Egoistisch - Egomanie scheint nicht zu passen
alle Leute die bei einer Suche nach ähnlichen Lösungen diesen Beitrag finden,
dürfen sich/dich dann Fragen was für eine Lösung das ist ?
Findest du das, nachdem sich doch einige Leute Mühe gegeben haben dir zu helfen,
nicht ein wenig Egozentrisch?
Gruß
LotPings
@Biber, vielleicht ja auch nur Egoistisch - Egomanie scheint nicht zu passen
Moin LotPings,
Wenn das das Schlusswort Daffmans gewesen sein sollte bis zum Wochenende...
dann werden keine Leute bei einer Suche nach ähnlichen Lösungen diesen Beitrag finden, versprochen.
Ich hab da so einen Verdacht, weil auch ich ein passendes Wort für so ein Verhalten gesucht habe.
... mal sehen, ob wir die gleiche Verhaltensauffälligkeit meinten.
Grüße
Biber
Zitat von @77559:
Das ist ja nett,
alle Leute die bei einer Suche nach ähnlichen Lösungen diesen Beitrag finden,
dürfen sich/dich dann Fragen was für eine Lösung das ist ?
Mach dir keine Sorgen.Das ist ja nett,
alle Leute die bei einer Suche nach ähnlichen Lösungen diesen Beitrag finden,
dürfen sich/dich dann Fragen was für eine Lösung das ist ?
Wenn das das Schlusswort Daffmans gewesen sein sollte bis zum Wochenende...
dann werden keine Leute bei einer Suche nach ähnlichen Lösungen diesen Beitrag finden, versprochen.
Findest du das, nachdem sich doch einige Leute Mühe gegeben haben dir zu helfen,
nicht ein wenig Egozentrisch?
Ich muss jetzt los nach Wikipedia ... mal nachschlagen, was "egozentrisch" heisst...nicht ein wenig Egozentrisch?
Ich hab da so einen Verdacht, weil auch ich ein passendes Wort für so ein Verhalten gesucht habe.
... mal sehen, ob wir die gleiche Verhaltensauffälligkeit meinten.
Grüße
Biber
Zitat von @Daffman:
Hier ist der gesuchte Code um die find ausgabe einzuramhmen mit ascii (dos erweiterung) zeichen.
Find ich gut Daffman.Hier ist der gesuchte Code um die find ausgabe einzuramhmen mit ascii (dos erweiterung) zeichen.
Ich hab eine ganze Zeit gebraucht um deinen Code zu verstehen.
Die temporärem Dateien und das Abspeichern in Environment Variablen ist eigentlich nicht nötig.
Mit Sonderzeichen im Text dürfte deine Version auch nicht gut klar kommen.
Hier ist eine etwas universellere und simpler aufgebaute Version, an die Textzeilen werden einfach
genug Blanks angehängt und dann bei 75 Zeichen abgeschnitten (auch ein Umbruch wäre möglich)
@Echo off & SetLocal
mode con cols=80 lines=75
Set "pre= "
Set Inp="%~f0"
Set "Blanks= "
:: Zeilen zählen
For /f %%A in ('find /C /i "%pre%" ^<%Inp%') Do Set Zeilen=%%A
If %Zeilen%. LSS 1. Echo Nix da und tschuess & Goto :Eof
:: Kopf
echo +----------------------------------------------------------------------------+
echo ^| ^|
:: Datei-Inhalt
For /f "Delims=" %%A in ('find /i "%pre%" ^<%Inp%'
) Do Set "Zeile=%%A%Blanks%" & Call :Out
:: Fuss
echo ^| ^|
echo +----------------------------------------------------------------------------+
Pause
Goto :Eof
:Out
Set "Zeile=%Zeile:"=¬%"
Set "Zeile= | %Zeile:~0,75%|"
set "Zeile=%Zeile:^=^^%"
set "Zeile=%Zeile:(=^(%"
set "Zeile=%Zeile:)=^)%"
Set "Zeile=%Zeile:<=^<%"
Set "Zeile=%Zeile:|=^|%"
Set "Zeile=%Zeile:>=^>%"
Set "Zeile=%Zeile:&=^&%"
Set "Zeile=%Zeile:¬="%"
Echo %Zeile%
Wenn so ein Batch sich selbst verwursten/darstellen kann ist das schon eine Auszeichnung.
Die Techniken zum Escapen (Maskieren) der Sonderzeichen ist allerdings nicht von mir, sondern stammt AFAIK ursprünglich von Ritchie Lawrence.
ich hoffe, ich konnte deine ängste, mit einem egoistischen menschen geschrieben zu haben, beseitigen.
Um meine Ängste geht es nicht, sondern darum ALLEN Forumsbeteiligten einen Lerneffekt zu verschaffen oder wenigstens etwas Vergnügen durch (evtl. für dich unangenehme) Kommentare.Auch dein obiger Code weist noch einige Schwachstellen auf, die nur bei einer Begutachtung durch Dritte angesprochen/verbessert werden können.
Gruß
LotPings
Hallo alexander,
sorry, ich verstehe deine Frage nicht.
Welche Fehler mit welcher Batch?
Mein Original (Quelltext kopiert) funktioniert hier auf mehreren berschiedenen Windows-OS einwandfrei.
Gruß
LotPings
sorry, ich verstehe deine Frage nicht.
Welche Fehler mit welcher Batch?
Mein Original (Quelltext kopiert) funktioniert hier auf mehreren berschiedenen Windows-OS einwandfrei.
Gruß
LotPings
Sorry ich komme nicht mit,
gings es hier nicht um die Darstellung einer Datei mit einem geschlossenen Rahmen?
Meine Batch tut im Prinzip nichts anderes als deine etwas kompliziertere Version ( wobei mir klar ist das das scheinbar nur ein Fragment war)
Aber was ich nicht sehe, kann ich auch nicht verschlimmbessern
Gruß
LotPings
gings es hier nicht um die Darstellung einer Datei mit einem geschlossenen Rahmen?
Meine Batch tut im Prinzip nichts anderes als deine etwas kompliziertere Version ( wobei mir klar ist das das scheinbar nur ein Fragment war)
Aber was ich nicht sehe, kann ich auch nicht verschlimmbessern
Gruß
LotPings
Und wenn du mal das "goto:eof" aus Zeile 15 vorsichtig und liebe voll clonst und sanft in Zeile 28 duplizierst?
Du hast 2x eine baugleiche und gelichnamige Prozedur namens :Out definert.. welche soll denn die CMD.exe wann und warum nehmen?
Aber okay, die zweite findet eh' keiner... da könnte ebensogut ein kleiner Haiku stehen oder "2 Becher mitbringen und Mutti anrufen".
Und zu guter Letzt... nur mal angenommen, der Schnipsel würde tatsächlich treudoof, wie Bätche nun mal sind, in den ersten "Call :Out"-Aufruf reinstolpern.. und auch tatsächlich die erste ":Out"-Subroutine finden...
Dann läuft er , da diese :Out ja nirgends mit "goto :eof" beendet wird- weiter zur nächsten Datei "Musik.txt",
von da wieder nach oben in die "Call:Out"...
...ohne Pause wieder zur "Musik.txt" ..
von da wieder zur "Call: Out".... usw.
Das kann sich hinziehen.
Wenn du möchtest, dass mehrere Dateien in eine Schleifenverarbeitung denselben Algorithmus über sich ergehen lassen sollen, dann ...
*Überraschung* solltest du diese Dateien in einer Schleife abarbeiten.
Eine FOR-Anweisung wäre meine Empfehlung.
Grüße
Biber
BTW... die jetzige Fragestellung hat in etwa so viel mit der Ursprungsfrage zu tun wie die Aussagen der FDP vor der Wahl mit ihren Aussagen 2 Minuten nach der Wahl.
Du hast 2x eine baugleiche und gelichnamige Prozedur namens :Out definert.. welche soll denn die CMD.exe wann und warum nehmen?
Aber okay, die zweite findet eh' keiner... da könnte ebensogut ein kleiner Haiku stehen oder "2 Becher mitbringen und Mutti anrufen".
Und zu guter Letzt... nur mal angenommen, der Schnipsel würde tatsächlich treudoof, wie Bätche nun mal sind, in den ersten "Call :Out"-Aufruf reinstolpern.. und auch tatsächlich die erste ":Out"-Subroutine finden...
Dann läuft er , da diese :Out ja nirgends mit "goto :eof" beendet wird- weiter zur nächsten Datei "Musik.txt",
von da wieder nach oben in die "Call:Out"...
...ohne Pause wieder zur "Musik.txt" ..
von da wieder zur "Call: Out".... usw.
Das kann sich hinziehen.
Wenn du möchtest, dass mehrere Dateien in eine Schleifenverarbeitung denselben Algorithmus über sich ergehen lassen sollen, dann ...
*Überraschung* solltest du diese Dateien in einer Schleife abarbeiten.
Eine FOR-Anweisung wäre meine Empfehlung.
Grüße
Biber
BTW... die jetzige Fragestellung hat in etwa so viel mit der Ursprungsfrage zu tun wie die Aussagen der FDP vor der Wahl mit ihren Aussagen 2 Minuten nach der Wahl.
Hallo alexander,
:eof ist ein immer vorhandener, von der CMD.exe vorgehaltener Label für End Of File
Ein
Das gehört immer ans Ende des Hauptteils vor ggfs vorhandene Subroutinen.
Wenn du ein Programmteil mehrfach mit unterschiedlichen Argumenten benutzen willst mach einfach eine Subroutine draus.
Wobei mir nicht klar ist, welchen Sinn mehrere am Bildschirm durchlaufende umrahmte Dateien machenn ....
FWIW ungestestet:
Gruß
LotPings
:eof ist ein immer vorhandener, von der CMD.exe vorgehaltener Label für End Of File
Ein
goto :Eof
bewirkt ein Beenden des laufenden Batches resp. der aktuellen Subroutine.Das gehört immer ans Ende des Hauptteils vor ggfs vorhandene Subroutinen.
Wenn du ein Programmteil mehrfach mit unterschiedlichen Argumenten benutzen willst mach einfach eine Subroutine draus.
Wobei mir nicht klar ist, welchen Sinn mehrere am Bildschirm durchlaufende umrahmte Dateien machenn ....
FWIW ungestestet:
@Echo off & SetLocal
mode con cols=80 lines=75
Set Set /P pre="Pre angeben: "
Set "Blanks= "
For %%A in ("MY Downloads.txt"
"Musik.txt" ) Do Call :ProcFile %%A
Goto :Eof
:ProcFile
Set Inp=%1
:: Zeilen zählen
For /f %%A in ('find /C /i "%pre%" ^<%Inp%') Do Set Zeilen=%%A
If %Zeilen%. LSS 1. Echo Nix da und tschuess & Goto :Eof
:: Kopf
echo +----------------------------------------------------------------------------+
echo ^| ^|
:: Datei-Inhalt
For /f "Delims=" %%A in ('find /i "%pre%" ^<%Inp%'
) Do Set "Zeile=%%A%Blanks%" & Call :Out
:: Fuss
echo ^| ^|
echo +----------------------------------------------------------------------------+
Pause
Goto :Eof
:Out
Set "Zeile=%Zeile:"=¬%"
Set "Zeile= | %Zeile:~0,75%|"
set "Zeile=%Zeile:^=^^%"
set "Zeile=%Zeile:(=^(%"
set "Zeile=%Zeile:)=^)%"
Set "Zeile=%Zeile:<=^<%"
Set "Zeile=%Zeile:|=^|%"
Set "Zeile=%Zeile:>=^>%"
Set "Zeile=%Zeile:&=^&%"
Set "Zeile=%Zeile:¬="%"
Echo %Zeile%
Gruß
LotPings