Rahmen-Sonderzeichen ausgeben
Hallo zusammen!
Ich bin an einer Batch dran, die bestimmte Aufgaben automatisieren soll,hauptsächlich für solche, die es sonst nicht checken.Jetzt wollte ich mit diesen Rahmenzeichen der Codepage 850 (═,╔,╚,║,╝,╗,...) so eine Art Kopfzeile machen. Also hab ich die Zeichen mal ausprobiert im Prompt (Also "Alt+2+0+0" oder so). Hat alles auch super geklappt. Nun wollt ich das ganze in die Batch schreiben (Also etwa: echo.╔══╗). Jetzt spuckt er aber nur Blödsinn aus (ÔèÉ). Wenn ich aber im Fenster direkt "echo.╔══╗" eingebe, funktioniert es.
Danach habe ich den ganzen Rahmen mal nur mit "#" gemacht. Dabei fiel mir auf, das wenn ich die ganze Zeile mit "#" (bei mir 80) fülle, dass es dann eine Leerzeile gibt.
Kennt jemand eines dieser Probleme? Wenn eines gelöst würde, würde es im Notfall(wenn das andere überhaupt nicht geht) reichen.
Mathe172
Ich bin an einer Batch dran, die bestimmte Aufgaben automatisieren soll,hauptsächlich für solche, die es sonst nicht checken.Jetzt wollte ich mit diesen Rahmenzeichen der Codepage 850 (═,╔,╚,║,╝,╗,...) so eine Art Kopfzeile machen. Also hab ich die Zeichen mal ausprobiert im Prompt (Also "Alt+2+0+0" oder so). Hat alles auch super geklappt. Nun wollt ich das ganze in die Batch schreiben (Also etwa: echo.╔══╗). Jetzt spuckt er aber nur Blödsinn aus (ÔèÉ). Wenn ich aber im Fenster direkt "echo.╔══╗" eingebe, funktioniert es.
Danach habe ich den ganzen Rahmen mal nur mit "#" gemacht. Dabei fiel mir auf, das wenn ich die ganze Zeile mit "#" (bei mir 80) fülle, dass es dann eine Leerzeile gibt.
Kennt jemand eines dieser Probleme? Wenn eines gelöst würde, würde es im Notfall(wenn das andere überhaupt nicht geht) reichen.
Mathe172
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 148443
Url: https://administrator.de/contentid/148443
Ausgedruckt am: 21.11.2024 um 17:11 Uhr
4 Kommentare
Neuester Kommentar
Hallo Mathe172,
dein Rahmenproblem ist ein Zeichensatzproblem
Teste einfach mal auf der Kommandozeile:
Danach sollte rahmen.bat die Rahmenzeichen korrekt ausgeben, und mit ein Editor Deiner Wahl wird Dir scheinbarer Zeichenmüll angezeigt, aber an sich klappt es so.
Das Problem mit den 80 Zeichen ist dadurch begründet, dass nach einer Ausgabe mit echo immer ein CR/LR ausgegeben wird.
Da aber bereits 80 Zeichen ausgegeben wurden steht der Cursor bereits in der nächsten Zeile ein CR/LF bewirkt dann eine Leerzeile.
Entweder die "80er" Zeilen einfach ausgeben mit (hängt kein CR/LF an die Ausgabe an)
Oder man baut seinen Rahmen so, dass er mit nur einem Echo ausgegeben wird
Oder man verwendet ein LF Zeichen um mit einem Echo mehrere Zeilen direkt auszugeben
dein Rahmenproblem ist ein Zeichensatzproblem
Teste einfach mal auf der Kommandozeile:
echo @echo ╚╔ >> c:\temp\rahmen.bat
Das Problem mit den 80 Zeichen ist dadurch begründet, dass nach einer Ausgabe mit echo immer ein CR/LR ausgegeben wird.
Da aber bereits 80 Zeichen ausgegeben wurden steht der Cursor bereits in der nächsten Zeile ein CR/LF bewirkt dann eine Leerzeile.
Entweder die "80er" Zeilen einfach ausgeben mit (hängt kein CR/LF an die Ausgabe an)
<nul set /p .=Mein Rahmen
Oder man baut seinen Rahmen so, dass er mit nur einem Echo ausgegeben wird
echo %RamenZeile1%%RamenZeile2%%RamenZeile3%...
Oder man verwendet ein LF Zeichen um mit einem Echo mehrere Zeilen direkt auszugeben
@echo off
setlocal EnableDelayedExpansion
set lf=^
rem Hier müssen zwei Leerzeile sein, damit das LF erzeugt werden kann
set "Line1=╔══════╗"
set "Line2=║ ║"
set "Line3=╚══════╝"
echo %Line1%!lf!%Line2%!lf!%Line2%!lf!%Line3%
Hallo mathe172
Zu 1.: Tut mir Leid, keine Ahnung.
Zu 2.: Eigentlich ganz logisch
Was macht ein echo am Ende ? Es fügt einen Zeilenumbruch hinzu !
Und schon sind es 81 Zeichen. 80 davon füllen deine erste Zeile, das letzte Zeichen (was jetzt dem Zeilenumbruch vom echo entspricht) steht damit an erster stelle in der zweiten Zeile. Nun tut ein Zeilenumbruch was ein Zeilenumbruch tun muss und macht nen Zeilenumbruch - Willkommen in Zeile DREI.
Das ist alles...
~Arano
Zu 1.: Tut mir Leid, keine Ahnung.
Zu 2.: Eigentlich ganz logisch
Was macht ein echo am Ende ? Es fügt einen Zeilenumbruch hinzu !
Und schon sind es 81 Zeichen. 80 davon füllen deine erste Zeile, das letzte Zeichen (was jetzt dem Zeilenumbruch vom echo entspricht) steht damit an erster stelle in der zweiten Zeile. Nun tut ein Zeilenumbruch was ein Zeilenumbruch tun muss und macht nen Zeilenumbruch - Willkommen in Zeile DREI.
Das ist alles...
~Arano
Hi Mathe,
Hier etwas fertiges:
Gruß Phil
Hier etwas fertiges:
::1
::: Dieses Umrahmte Menue ist so Breit wie
::: die laengste Zeile aus diesen Menue PLUS Rahmen
:::
::: Bei Maximaler Ausnutzung sind 77 Zeichen in der Breite Nutzbar
::: Dazu einfach die Variable HMax entsprechend setzen!
:::
::: Die fuehrenden 3 Doppelpunkte PLUS Leerzeichen
::: sind fuer die Menueerkennung erforderlich!
:::
::: Wenn Du das Menue Zentrieren moechtest -
::: (also vorne auch ein Leerzeichen), dann setze in die
::: For-Schleife noch jeweils ein Leerzeichen hinter echo
:::
::: Dafuer kannst Du aber nur 76 Zeichen Verwenden!
:::
::: die erste Zeile (mit ::1 ) muss so bleiben!
::: Die letzte Zeile Markiert das Ende und dient als Lineal.
::; 1...5....|....,....|....,....|....,....|....,....|....,....|....,..70|....77|
@echo off&setlocal
:: HMax --- Horizontale Breite
set /a HMax=0,vor=0
setlocal enabledelayedexpansion
for /f "delims=:" %%i in ('findstr /o /b "::: ::;" "%~f0"') do (set /a Max = %%i - vor -6
if !HMax! lss !Max! set "HMax=!Max!"
set "vor=%%i"
)
for /l %%i in (1,1,%HMax%) do (call set "V=!V!Í"
call set "empty=!empty! "
)
endlocal & (set /a HMax = %HMax% & set "empty=%empty%" & set "V=%V%")
:: Rahmenerstellung
for /f "usebackq tokens=1,*" %%i in ("%~f0") do (set "Line=%%j%empty%"
setlocal enabledelayedexpansion
set "Line=!Line:~0,%HMax%!
if "%%i" == "::1" echo É%V%»
if "%%i" == ":::" echo º!Line!º
if "%%i" == "::;" echo È%V%¼
endlocal
)
pause
goto :eof
Gruß Phil