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

Mitglied: Ren

Ren (Level 1) - Jetzt verbinden

23.11.2008, aktualisiert 03.12.2008, 46192 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 ..
Ähnliche Inhalte
E-Mail

Echo TU-Berlin.de derzeit down bzw. Fehlkonfiguration

Tipp von HenereE-Mail3 Kommentare

So, eben geht mal grad garnix an echo@tu-berlin.de :-( Das hab ich bei denen noch nie erlebt, dass die ...

Neue Wissensbeiträge
Verschlüsselung & Zertifikate
Meine Wissenssammlung zu Bitlocker
Erfahrungsbericht von DerWoWusste vor 7 StundenVerschlüsselung & Zertifikate1 Kommentar

Die Motivation für diesen Beitrag waren die vielen Posts rund um dieses Thema, die deutlich machen, wie viele Einzelaspekte ...

E-Mail
Email-Apps und Verhalten bei Pop3
Erfahrungsbericht von kfranzk vor 2 TagenE-Mail11 Kommentare

Hallo Freunde, da mir mein diesbezüglicher Faden als gelöst markiert wurde, muss ich hier neu aufsetzen. Ich arbeite bewusst ...

Hyper-V

Optimiertes Ubuntu per Microsoft Hyper-V-Schnellerstellung verfügbar

Anleitung von Frank vor 2 TagenHyper-V

Für Microsofts Virtualisierungssoftware Hyper-V ist ab sofort auch ein optimiertes Ubuntu 18.04.1 LTS verfügbar. In der "Hyper-V-Schnellerstellung" App, die ...

Sicherheits-Tools

Trend Micro WorryFree Business Security (WFBS) 10 - neuer Patch 1470 verfügbar

Tipp von VGem-e vor 2 TagenSicherheits-Tools1 Kommentar

Servus, mal sehen, ob mit Patch 1470, zu finden unter dann die angeblich fehlerhafte Funktion, die unter W10 im ...

Heiß diskutierte Inhalte
Netzwerke
Hilfe bei der Planung meines Heimnetzwerks
Frage von DHD082Netzwerke14 Kommentare

Hallo zusammen, wir bauen gerade ein Einfamilienhaus, welches ich mit einem Heimnetzwerk ausstatten möchte. Da ich zwar auch in ...

Tipps & Tricks
Nagstamon und PRTG Monitoring
Frage von Der.ITlerTipps & Tricks13 Kommentare

Hallo Ihr, heute am Sonntag bin ich mal früh aufgestanden um mich mit dem Problem von Gestern zu beschäftigen. ...

Hardware
Sophos SG135 - Routing
Frage von Xaero1982Hardware13 Kommentare

Moin Zusammen, ich ersetze gerade nen alten Cisco DualWAN Router durch eine SG 135. Ich muss bestimmte Ziele über ...

Datenschutz
Gilt ein Ransomware-Befall als Datenpanne nach DSGVO?
Frage von MOS6581Datenschutz12 Kommentare

Moin Kollegen, wenn sich jemand Ransomware einfängt und dadurch bspw. Kundendaten verschlüsselt werden; gilt dies dann als meldepflichtige Datenpanne ...