Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Rahmen-Sonderzeichen ausgeben

Frage Entwicklung Batch & Shell

Mitglied: mathe172

mathe172 (Level 1) - Jetzt verbinden

05.08.2010 um 16:36 Uhr, 8693 Aufrufe, 4 Kommentare

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
Mitglied: jeb-the-batcher
05.08.2010 um 19:38 Uhr
Hallo Mathe172,

dein Rahmenproblem ist ein Zeichensatzproblem
Teste einfach mal auf der Kommandozeile:

01.
echo @echo ╚╔ >> c:\temp\rahmen.bat
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)
01.
 <nul set /p .=Mein Rahmen
Oder man baut seinen Rahmen so, dass er mit nur einem Echo ausgegeben wird
01.
echo %RamenZeile1%%RamenZeile2%%RamenZeile3%...
Oder man verwendet ein LF Zeichen um mit einem Echo mehrere Zeilen direkt auszugeben
01.
@echo off 
02.
setlocal EnableDelayedExpansion 
03.
set lf=^ 
04.
 
05.
 
06.
rem Hier müssen zwei Leerzeile sein, damit das LF erzeugt werden kann 
07.
set "Line1=╔══════╗" 
08.
set "Line2=║      ║" 
09.
set "Line3=╚══════╝" 
10.
echo %Line1%!lf!%Line2%!lf!%Line2%!lf!%Line3%
Bitte warten ..
Mitglied: Arano
05.08.2010 um 19:43 Uhr
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
Bitte warten ..
Mitglied: mathe172
05.08.2010 um 20:44 Uhr
Hallo zusammen!

Danke, es klappt super! Ich hab zwar beides schonmal gehört, war aber offensichlich u blöd um draufzukommen.

Mathe172
Bitte warten ..
Mitglied: pieh-ejdsch
05.08.2010 um 20:45 Uhr
Hi Mathe,

Hier etwas fertiges:
01.
::1 
02.
::: Dieses Umrahmte Menue ist so Breit wie 
03.
::: die laengste Zeile aus diesen Menue PLUS Rahmen 
04.
:::  
05.
::: Bei Maximaler Ausnutzung sind 77 Zeichen in der Breite Nutzbar 
06.
::: Dazu einfach die Variable HMax entsprechend setzen! 
07.
::: 
08.
::: Die fuehrenden 3 Doppelpunkte PLUS Leerzeichen 
09.
::: sind fuer die Menueerkennung erforderlich! 
10.
:::  
11.
::: Wenn Du das Menue Zentrieren moechtest - 
12.
::: (also vorne auch ein Leerzeichen), dann setze in die 
13.
::: For-Schleife noch jeweils ein Leerzeichen hinter echo 
14.
:::  
15.
::: Dafuer kannst Du aber nur 76 Zeichen Verwenden! 
16.
:::  
17.
::: die erste Zeile (mit ::1 ) muss so bleiben! 
18.
::: Die letzte Zeile Markiert das Ende und dient als Lineal. 
19.
::; 1...5....|....,....|....,....|....,....|....,....|....,....|....,..70|....77| 
20.
 
21.
@echo off&setlocal 
22.
 
23.
:: HMax --- Horizontale Breite 
24.
set /a HMax=0,vor=0 
25.
 
26.
setlocal enabledelayedexpansion 
27.
for /f "delims=:" %%i in ('findstr /o /b "::: ::;" "%~f0"') do (set /a Max = %%i - vor -6 
28.
	if !HMax! lss !Max! set "HMax=!Max!" 
29.
	set "vor=%%i" 
30.
31.
for /l %%i in (1,1,%HMax%) do (call set "V=!V!Í" 
32.
	call set "empty=!empty! " 
33.
34.
endlocal & (set /a HMax = %HMax% & set "empty=%empty%" & set "V=%V%") 
35.
 
36.
:: Rahmenerstellung 
37.
for /f "usebackq tokens=1,*" %%i in ("%~f0") do (set "Line=%%j%empty%" 
38.
	setlocal enabledelayedexpansion 
39.
	set "Line=!Line:~0,%HMax%! 
40.
	if "%%i" == "::1" echo É%V%» 
41.
	if "%%i" == ":::" echo º!Line!º 
42.
	if "%%i" == "::;" echo È%V%¼ 
43.
	endlocal 
44.
45.
pause 
46.
goto :eof
Gruß Phil
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Batch ausgabe zeilenweise stat spaltenweise ausgeben (4)

Frage von sugram zum Thema Batch & Shell ...

Batch & Shell
gelöst Mit Batchdatei Informationen auslesen und diese strukturiert in Excel ausgeben (9)

Frage von Flodsche zum Thema Batch & Shell ...

C und C++
String einlesen in Array und wieder ausgeben von hinten (4)

Frage von Protected zum Thema C und C ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...