Ladebalken Batch Datei nicht richtig, Notepad ++?
Ich will mir einen Ladebalken genauso erstellen wie in diesem Video:
https://www.youtube.com/watch?v=FxCXReM_61E
Wenn ich das aber so mache mit der Hochzahl 2
@echo off
echo.
echo ²
pause >Nul
wird der Balken nicht angezeigt, es steht nur 2 dann da.
Will es so haben :
Woran liegt das ? Codierung, Sprache usw ?
Ich benutze Notepad ++
3 Antworten
Standardmäßig verwendet Batch ASCII-Zeichen der Codepage 1254. Notepad++ speichert hingegen Texte als Unicode ohne BOM!
Du könntest Notepad ++ auf ANSIcodierung zwingen:
...Das wäre jedoch Blödsinn und begrenzt die Möglichkeiten von Batch.
Viel einfacher ist es Batch zur Verwendung von Unicode zu zwingen. (das erlaubt auch deutsche Umlaute oder andere eurasische Zeichen/Akzente (scantinavisch, kyrillisch, griechisch, polnisch, portugisisch...)
chcp 65001 >nul
In Diesem Fall speicherst du mit der Kodierung UTF-8 (ohne BOM).
zu dem Video 😱 , weshalb traust Du dem Gestammel eines Kindes?🤣 Wer keine bessere Lösung zu bieten hat, als Spagetticode sllte sich YT-Tutorials verkneifen...
folgende kleine Zeile schreibt Zeichen ohne in eine Neue Zeile zu springen:
<nul set /p "=A"
Folglich funktioniert auch eine Schleife mit mehreren...
Demo.cmd
@echo off
chcp 65001 >nul
rem 20 Schritte
for /l %%a in (1,1,20) do (
rem schreibe ohne Zeilenvorschub am ende der Zeile
<nul set /p "=█"
rem eine Sekunde pause (repräsentiert das was den Fortschritt bremst)
timeout 1 >nul
)
rem wenn fertig neu Zeile
echo:
pause
Das ist allerdings keine Option, wenn man neben dem Balken auch noch anderen Kram schreiben möchte. Spagetticode ist natürlich keine Option. Seit Windows 10 17... sind in Batch (Terminal)ESC-Sequenzen erlaubt. Diese beinhalten auch die Steuerung des Schreib-Cursors.
demo2.cmd
@echo off
chcp 65001 >nul
rem ein Paar Macros vorbereiten (man könnte die Esc-Sequenzen auch von Hand eingeben, das wäre jedoch fehleranfällig) :
rem erzeuge ESC-Zeichen (ASCII 27)
for /f "delims=;" %%. in ('"prompt $E; & for %%. in (nul) do rem"') do ( set "ESC=%%.")
rem Cursormacros:
set "loadCursorPos=%ESC%[u"
set "saveCursorPos=%ESC%[s"
rem Cursor unsichtbar machen
echo %ESC%[?25l
:::::: Ende Vorbereitung ::::::
for /l %%a in (1,1,20) do (
rem die folgende zeile tut folgendes:
rem lade (wenn gespeichert) gesicherte CursorPosition , schreibe das gewünschte Zeichen, speichere aktuelle Cursorposition
echo %loadCursorPos%█%saveCursorPos%
echo ich mache jetzt irgendwas anderes:
echo Zähle: %%a
echo babeluba laberrhababer
timeout 1 >nul
)
echo Fertig...
pause
...und weil wir gerade bei ESC-Sequenzen sind, es geht auch in Farbe:
@echo off
rem Umlaute darstellen
chcp 65001 >nul
for /f "delims=;" %%. in ('"prompt $E; & for %%. in (nul) do rem"') do ( set "ESC=%%.")
set "loadCursorPos=%ESC%[u"
set "saveCursorPos=%ESC%[s"
echo %ESC%[?25l
echo Jetzt wird's richitig Bunt ....
rem Selektoren Vorder- und Hintergrund:
set "fGroundClr=38"
set "bGroundClr=48"
rem Farbtabelle für Regenbogen erzeugen
set "colorTable=52,88,124,160,196,202,208,214,220,226,190,154,118,82,46,41,36,31,26,21,20,55,53"
rem zeichnen
echo Hintergrund-Regenbogen
rem CursorPosition speichern
echo %saveCursorPos%
for %%a in (%colorTable%) do (
echo %loadCursorPos%%ESC%[%bGroundClr%;5;%%am*%saveCursorPos%
echo %ESC%[0maktuelle Farbnummer : %%a
echo laberrhababer... ÄÖÜ Маша и медведь
timeout 1 >nul
)
rem auf Standardfaben zurücksetzen
echo %ESC%[0m
echo Vordergrund-Regenbogen
rem CursorPosition speichern
echo %saveCursorPos%
for %%a in (%colorTable%) do (
echo %loadCursorPos%%ESC%[%fGroundClr%;5;%%am*%saveCursorPos%
echo aktuelle Farbnummer : %%a
echo laberrhababer...
timeout 1 >nul
)
echo %loadCursorPos%%ESC%[0m
echo:
echo:
pause


Also ich kriege auch keinen Ladebalken auf die Art hin. Die hoch ² wird in meiner Batch mit einem Sonderzeichen interpretiert.
Da gab es sicher noch Unterschiede zu Windows 7, was der Video-Ersteller benutzt.
In diesem Thread gibt es ein paar Anreize für andere Ascii-Art Ladebalken, eventuell findest du hier etwas, das dich anspricht:
https://stackoverflow.com/questions/2685435/cooler-ascii-spinners
Der Sinn hinter der ² ist, dass ein Zeichen verwendet wird, das im CLI nicht erkannt wird. Unter Windows10 ist das Zeichen in der CMD aber druckbar, darum wird auch einfach nur ² ausgegeben.
Nutze halt ein passenderes Zeichen, etwa
█
oder
■
Hm, das Zeichen scheint man zwar eingeben zu können, aber es wird nicht korrekt ausgegeben, wenn man es in einer Datei speichert.
Ich würde dann einfach ein "#" nutzen.
Aber das muss doch darzustellen sein oder nicht ??
Soweit ich weiß, kann die CMD nur mit ANSI-Zeichen korrekt arbeiten, nicht mit allen ASCII Zeichen.
Korrektur: Nichtmal alle ANSI-Zeichen scheinen zu funktionieren.
Wenn man in der Batch Unicode-Zeichen verwendet und die Batch auch im UTF-8 speichert, muss man in der Batch zur Laufzeit auch die UTF-8 Codepage setzen chcp 65001
Ich habe das mal so gemacht mit dem █ Zeichen aber es funktioniert auch nicht:
@echo off
color a
echo.
echo █
echo 0 Prozent
ping -n 2 127.0.0.1>NUL
cls
echo.
echo ██
echo 10 Prozent
ping -n 2 127.0.0.1>NUL
cls
echo.
echo ███
echo 20 Prozent
ping -n 2 127.0.0.1>NUL
cls
echo.
echo ████
echo 30 Prozent
ping -n 2 127.0.0.1>NUL
cls
echo.
echo █████
echo 40 Prozent
ping -n 2 127.0.0.1>NUL
cls
echo.
echo ██████
echo 50 Prozent
ping -n 2 127.0.0.1>NUL
cls
echo.
echo ███████
echo 60 Prozent
ping -n 2 127.0.0.1>NUL
cls
echo.
echo ████████
echo 70 Prozent
ping -n 2 127.0.0.1>NUL
cls
echo.
echo █████████
echo 80 Prozent
ping -n 2 127.0.0.1>NUL
cls
echo.
echo ██████████
echo 90 Prozent
ping -n 2 127.0.0.1>NUL
cls
echo.
echo ███████████
echo 100 Prozent
ping -n 2 127.0.0.1>NUL
cls
echo.
echo.
pause