Top-Themen

Aktuelle Themen (A bis Z)

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

Echo ohne Zeilenumbruch und ähnliche Spielereien

Anleitung Entwicklung Batch & Shell

Mitglied: Ren

Ren (Level 1) - Jetzt verbinden

23.11.2008, aktualisiert 03.12.2008, 44175 Aufrufe, 5 Kommentare

Den Befehl ECHO kennt ja jeder. Damit lässt sich einen Zeile, mit ECHO. auch einen leere, auf dem Bildschirm ausgeben. ECHO macht aber auf jeden Fall einen Zeilenumbruch nach dem Text. Dem einen oder anderen ist sicher schon mal der Wunsch aufgekommen, etwas auf den Bildschirm zu schreiben, ohne gleich die Zeile umzubrechen. Auch das ist möglich.

So ohne weiteres käme man wahrscheinlich nicht auf die Idee, dass das mit Hilfe des Befehls SET geht. Genauer mit Hilfe des Befehls SET mit der Option /p. SET weist Variablen Werte zu. /p kann dazu verwendet werden, dass der Benutzer den Wert für die Variable selbst eingeben kann. Syntax:
set /p VARIABLENMANE=TEXT, DEN DER BENUTZER VOR DER EINGABE SEHEN KÖNNEN SOLL
Der Clou: Man kann den Variablennamen einfach weglassen. Der Text wird immer noch ausgegeben, OHNE Zeilenumbruch.
set /p =TEXT, DEN DER BENUTZER VOR DER EINGABE SEHEN KÖNNEN SOLL
Dummerweise wird jetzt immer noch auf eine Eingabe des Benutzers gewartet. Aber dem Problem geht man einfach mit Hilfe der Pipe-Funktion aus dem Weg. Wir müssen sozusagen einen Zeilenumbruch, der als Return gewertet wird, unserem SET-Befehl übergeben.
echo.|set /p =TEXT, DEN DER BENUTZER VOR DER EINGABE SEHEN KÖNNEN SOLL
So, wir haben jetzt ein Echo, das keinen Zeilenumbruch macht. Alternativ geht übrigens auch, einfach NUL dem Befehl mitzugeben.
set /p =TEXT, DEN DER BENUTZER VOR DER EINGABE SEHEN KÖNNEN SOLL<nul
Mit dieser Funktion kann man jetzt lustige, teilweise sinnvolle oder auch weniger sinnvolle Dinge machen:
Wie wäre es mit einem "Schnecken-CLS" (CLS löscht den Bildschirminhalt)
(for /L %i in (1,1,2000) do @set /p = <nul)&cls
Wer es braucht.
Auf diese Art und Weise lässt sich auch ein "Beep" ausgeben, ohne dass die Zeile umgebrochen wird. Wer nicht weiß, dass man in Batch-Dateien überhaupt herumpiepen kann, der lernt jetzt etwas ganz neues:
set /p =•<nul
Dieses • soll das Asci-Zeichen BEEP sein. In meinem Editor kann ich es über Strg+G bekommen, in Notepad++ tut es ein Alt+007 (kann man sich doch merken, oder nicht?) Wie schon geschrieben. Das 7. ASCI-Zeichen ist ein BEEP. Wird das auf die Konsole geschrieben, piept der Rechner. Da es wirklich ein Zeichen ist, wird der Cursor eins weiter geschoben.
set /p =Hello•World<nul
würde also die Ausgabe
Hello World
auf der Konsole erzeugen.

So, dann habe ich noch ein total sinnvolles Feature:
01.
@echo off 
02.
call :schreib "Dies ist ein Demotext!" 32100 
03.
:schreib 
04.
if not "%2"=="" set /a limit=%2 
05.
if "%2"=="" set /a limit=32000 
06.
if not defined text set text=%~1 
07.
if not defined text goto :eof 
08.
 
09.
set /P =%text:~0,1%<nul 
10.
:loop1 
11.
if %random% LSS %limit% goto :loop1 
12.
set text=%text:~1% 
13.
if defined text (goto :schreib) else (echo.) 
14.
goto :eof
Hintergrund des Ganzen ist wieder das set /p = Text<nul. Es wird Zeichenweise der Text, der übergeben wurde, ausgegeben. Zwischendurch wird eine zufällige Zeit gewartet. Diese Zeit resultiert daraus, dass %random% einen Wert zwischen 1 und 32767 liefert. Je näher man die Zahl, die man :schreib übergeben kann, der 32767 annähert, desto langsamer wird die Ausgabe. Sinnvoll sind Zahlen um die 32000 herum: Je größer die Zahl, desto unregelmäßiger wird es auch.
Übrigens: bei schreib ist mir etwas aufgefallen. Alle Schaltjahre kommt es mal vor, dass scheinbar das <nul nicht funktioniert.

Um das zu verifizieren, habe ich folgendes ebenfalls sehr nützliches Programm geschrieben.
1. lässt es die CPU brennen.
2. sieht es ein wenig nach Matrix aus, und
3. findet es den Fehler in der selbigen gleich. Es bleibt einfach ab und an stehen:
01.
@echo off 
02.
color 0A 
03.
:matrix 
04.
set /a text=%random% 
05.
if %text% LSS 10000 <nul set /p = !!  
06.
if %text% LSS 5000 <nul set /p = ## 
07.
if %text% LSS 2 <nul set /p =   
08.
if 32766 LSS %text% <nul set /p =   
09.
if 31766 LSS %text% <nul set /p = ?? 
10.
if 32366 LSS %text% <nul set /p = $$ 
11.
set /p = %text%<nul 
12.
goto :matrix
Diese ulkigen  in Zeile 7 und 8 waren bei mir wieder Piep-Töne (s.o.), damit wird die Ausgabe dann wirklich total unerträglich.
In dem Beispiel sieht man übrigens noch was sinnvolles: ich habe statt set /p = !!<nul einfach <nul set /p = !! genommen. Dann kann man sich den ersten Teil <nul set /p = tatsächlich als echo ohne Zeilenumbruch merken, und einfach in die Zwischenablage kopieren.
Übrigens habe ich auch statt <nul echo.| versucht, um festzustellen, ob auch das nicht immer geht. Und tatsächlich: geht auch nicht, es ist mir aber noch etwas aufgefallen. Mit echo.| ist die Matrix wesentlich langsamer als mit <nul.
Preisfrage: Warum bleibt folgendes Programm nicht stehen?
01.
@echo off 
02.
:countsheep 
03.
set /a text += 1 
04.
set /p = %text%<nul 
05.
goto :countsheep
Wie weit kann euer PC zählen?
Für den Schluss habe ich mir noch ein Schmankerl aufgehoben. Hier im Forum wird das Thema hitzig diskutiert. Richtig, es geht um die Fortschrittsanzeige. (Nein, ich möchte keine neue Diskussion darüber losbrechen, ob es möglich ist, den Fortschritt zu bestimmen, ich möchte ihn einfach nur ausgeben)
01.
@echo off & setlocal 
02.
::echo Alle Dateien zählen... 
03.
for /F "tokens=1" %%a in ('dir *.* ^| findstr "Datei(en)" ') DO (set /a files=%%a) 
04.
::Ende und Anfang malen, das sind 100% 
05.
fOR /L %%t IN (1,1,%files%) DO <NUL set /p =- 
06.
echo. 
07.
::Mach etwas mit jeder Datei und male dabei den Fortschritt 
08.
for /F "tokens=1" %%a in ('dir *.* /a-D /b') DO (<NUL set /p =.& type %%a>>muell.txt) 
09.
echo. 
10.
endlocal
Diese Batch macht nichts sinnvolles. Sie zählt die Dateien, damit sie weiß, wie weit sie ist, wenn sie mit jeder Datei etwas macht. Dann "kopiert" sie mit Hilfe von type den Text jeder Datei in die Text-Datei muell.txt.

Ich hoffe, das Lesen dieser Anleitung war nicht zu langweilig, vielleicht war ja für den Einen oder Anderen das Eine oder Andere wiederverwendbare dabei.
Gruß
Ren
Mitglied: 70620
24.11.2008 um 10:58 Uhr
Schöne Spielerei am Ende, aber insgesamt wars doch hilfreich für mich.
Naja.. erstmal nice to know, aber man weiss ja nie (zuwenig)

thx
Bitte warten ..
Mitglied: TheUntouchable
03.12.2008 um 14:19 Uhr
Das mit dem Ausgeben ohne Zeilenumbruch ist wirklich super, ich suche schon seit ewigkeiten nach so einer Möglichkeit! Danke für den Tipp :D
Bitte warten ..
Mitglied: Progfreund
05.07.2011 um 11:42 Uhr
Danke für deine Anleitung.

Ich bin mir bei der Verwendung des Codes nicht ganz sicher.
Warum werden echo. und <nul als return gewertet?
Sind sie quasi nur eine Rückmeldung, die als Return interpretiert wird, sodass
man auch <%TEMP%\Beispiel.txt nehmen könnte?

Welche Variable wird hier unter welchem Namen gesetzt?
01.
set /p = %text%<nul 
02.
if %text% LSS 2 <nul set /p =   
03.
if 31766 LSS %text% <nul set /p = ??
Wäre es in deiner Schreibweise auch möglich, set /p "=%text%<nul" mit
Anführungszeichen zu schreiben?

LG
Bitte warten ..
Mitglied: bastla
05.07.2011 um 21:16 Uhr
Hallo Progfreund!
Wäre es in deiner Schreibweise auch möglich, set /p "=%text%<nul" mit
Anführungszeichen zu schreiben?
Du hast es aber mit den Anführungszeichen ...

Versuch es so:
<nul set /p=""%text%""
Warum werden echo. und <nul als return gewertet?
Da ein "set /p" eine Eingabe erwartet, wird mit "echo." oder der Eingabeumleitung "<" eine solche geliefert; ob Du "Nichts" (nul) oder den Inhalt einer beliebigen Datei dafür verwendest, ist völlig egal, da diese Eingabe ohnehin ignoriert wird - es geht ja nur darum, die Ausgabe zu erzeugen.

Grüße
bastla
Bitte warten ..
Mitglied: timlg07
05.11.2016 um 13:54 Uhr
Auch sehr praktisch wenn man etwas in eine Datei schreiben will, ohne einen Zeilenumbruch automatisch einzufügen:

01.
@echo off 
02.
set x=0 
03.
:loop 
04.
set /a x+=1 
05.
echo.|set /p =%x%; >> data.dat 
06.
goto loop
coole Sache, immer gut zu wissen.
Bitte warten ..
Neue Wissensbeiträge
Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 18 StundenViren und Trojaner1 Kommentar

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 21 StundenRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Internet

Was nützt HTTPS, wenn es auch von Phishing Web-Seiten genutzt wird

Information von Penny.Cilin vor 3 TagenInternet17 Kommentare

HTTPS richtig einschätzen Ob man eine Webseite via HTTPS aufruft, zeigt ein Schloss neben der Adresse im Webbrowser an. ...

Webbrowser

Bugfix für Firefox Quantum released - Installation erfolgt teilweise nicht automatisch!

Erfahrungsbericht von Volchy vor 4 TagenWebbrowser8 Kommentare

Hallo zusammen, gem. dem Artike von heise online wurde mit VersionFirefox 57.0.1 sicherheitsrelevante Bugs behoben. Entgegen der aktuellen Veröffentlichung ...

Heiß diskutierte Inhalte
Batch & Shell
Trusted Sites für alle User auf dem PC einpflegen
Frage von xXTaKuZaXxBatch & Shell12 Kommentare

Aufgabestellung: Es sollen auf 1 PC (bzw. mehreren PCs) vertrauenswürdige Sites per Powershell eingetragen werden, die für alle User ...

Voice over IP
Telefonstörung - Ortsrufnummern kein Verbindungsaufbau
Frage von Windows10GegnerVoice over IP10 Kommentare

Hallo, sowohl bei uns als auch beim Opa ist es über VoIP nicht möglich Ortsrufnummern anzurufen. Es kommt nach ...

Vmware
DOS 6.22 in VMWare mit CD-ROM
gelöst Frage von hesperVmware10 Kommentare

Hallo zusammen! Ich hab ein saublödes Problem. Es ist eine VMWare mit DOS 6.22 zu erstellen auf dem ein ...

Cloud-Dienste
PIM als SaaS Nutzungsgebühr
Frage von vanTastCloud-Dienste8 Kommentare

Moin, wir haben uns ein PIM (Product Information Management) nach unseren Ansprüchen für viel Geld als SaaS-Lösung bauen lassen. ...