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, 9044 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 ..
Ähnliche Inhalte
Batch & Shell
gelöst Teile eines Powershell Skriptes in einer Tabelle ausgeben (3)

Frage von ReneBue zum Thema Batch & Shell ...

Microsoft Office
gelöst Excel 2010 Makro Ausgabe in bestimmter Tabelle ausgeben (6)

Frage von dressa zum Thema Microsoft Office ...

Batch & Shell
gelöst Warum funktioniert das echo in meiner for-Schleife auch mit Sonderzeichen? (9)

Frage von Pedant zum Thema Batch & Shell ...

Neue Wissensbeiträge
Heiß diskutierte Inhalte
Viren und Trojaner
Ransomware .nm4 (14)

Frage von Zyklo92 zum Thema Viren und Trojaner ...

Microsoft Office
+1.000 Ordner in Outlook: Wie besser? (11)

Frage von Matsushita zum Thema Microsoft Office ...

Zusammenarbeit
Administrator Verhalten nach Vertragskündigung (10)

Frage von sysbone zum Thema Zusammenarbeit ...