Ladebalken Batch Datei nicht richtig, 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:

Bild zum Beitrag

...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

Bild zum Beitrag

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
 - (cmd, Batch, Batch-Datei)  - (cmd, Batch, Batch-Datei)

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

Woher ich das weiß:Recherche

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

gundii722 
Fragesteller
 06.01.2023, 09:39

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

0
ZaoDaDong  06.01.2023, 09:46
@gundii722

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.

0
gundii722 
Fragesteller
 06.01.2023, 09:47
@ZaoDaDong

Aber das muss doch darzustellen sein oder nicht ??

0
ZaoDaDong  06.01.2023, 09:48
@gundii722

Soweit ich weiß, kann die CMD nur mit ANSI-Zeichen korrekt arbeiten, nicht mit allen ASCII Zeichen.

0
ZaoDaDong  06.01.2023, 09:52
@ZaoDaDong

Korrektur: Nichtmal alle ANSI-Zeichen scheinen zu funktionieren.

0
Erzesel  06.01.2023, 16:16
@ZaoDaDong

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

0