Batch - Zählschleife von 1-255 mit Umrechnung in Hexadezimal-Werte
Meine derzeitige Lösung funktioniert mit dem Hilfsprogramm Hex2dec von Sysinternals.com.
Hallo,
ich habe eine Lösung "gebastelt" mit der ich zwar zum Ziel komme, aber für mich so "aufgebläht" wirkt!
Zu viele Zwischenschritte, Hilfsvariablen....
Die Batch funktioniert!
Mit folgenden Einschränkungen/ Schönheitsfehler:
- Sie beginnt erst bei 16 (x10) an zu zählen, damit ich einen 2-stelligen(!) Hex-Wert erhalte. Wünschenswert ab 1!
- Zugriff auf ein externes Hilfsprogramm (Batch ist nicht aus einem Guss)! "Reine" Batch-Lösung wäre mir lieber!
- Vielleicht gibt es auch einen einfacheren/ besseren Weg zum Ziel zu kommen als Meiner - ich hoffe es!
Kurzum: mir fehlt für die Batch noch der nötige Feinschliff!
ANMERKUNG: Falls die Batch beendet wird. Soll sie beim nächsten Aufruf genau an der Stelle weiter machen an der sie aufgehört hat! Der Wert wird in zahl.txt festgehalten!
Hallo,
ich habe eine Lösung "gebastelt" mit der ich zwar zum Ziel komme, aber für mich so "aufgebläht" wirkt!
Zu viele Zwischenschritte, Hilfsvariablen....
Die Batch funktioniert!
Mit folgenden Einschränkungen/ Schönheitsfehler:
- Sie beginnt erst bei 16 (x10) an zu zählen, damit ich einen 2-stelligen(!) Hex-Wert erhalte. Wünschenswert ab 1!
- Zugriff auf ein externes Hilfsprogramm (Batch ist nicht aus einem Guss)! "Reine" Batch-Lösung wäre mir lieber!
- Vielleicht gibt es auch einen einfacheren/ besseren Weg zum Ziel zu kommen als Meiner - ich hoffe es!
Kurzum: mir fehlt für die Batch noch der nötige Feinschliff!
ANMERKUNG: Falls die Batch beendet wird. Soll sie beim nächsten Aufruf genau an der Stelle weiter machen an der sie aufgehört hat! Der Wert wird in zahl.txt festgehalten!
@echo off & setlocal
rem === Zählschleife DEC 16-255 / Umrechnung in HEX-Wert
rem === Umrechnen erst ab DEC 16 um zweistelligen "10" HEX-Wert zu erhalten
rem === Mit Einsatz des Hilfsprogramm Hex2dec.exe / http://technet.microsoft.com/de-de/sysinternals/bb896736(en-us).aspx
if not exist "zahl.txt" set /a zahl=15
rem - Schritt 1: Wert aus "zahl.txt" auslesen
for /f %%i in (zahl.txt) do set /a zahl=%%i
set /a zahl=zahl+1
if %zahl%==256 set /a zahl=16
rem === UMrechnung DEC->HEX mit Hilfe von Sysinternals.com Hex2Dec.exe
rem === Hilfsvariable %DEC%// Hilfsdatei "Hex.TXT"
set dec=%zahl%
hex2dec "%dec%" > hex.txt
FOR /F "tokens=3 delims= " %%i in (hex.txt) do set hex=%%i & REM === OUTPUT z.B. 32 = 0x20
del hex.txt>nul
set hex=%hex:~2,4% & REM === Zerlegen des Wertes z.B. 0x20 - OUTPUT: 20
set zahl=%hex%
rem === AUSGABE (1) Zwischenergebnis - zwecks Überpüfung! Kann gelöscht werden
@echo (1) ZAHL %zahl% --- DEC %dec% --- Hex %hex%
rem === %zahl% wieder in DEC-wert für Zählschleife umrechnen!
rem === Und Wert an Zahl.txt übergeben
rem === UMrechnung HEX->DEc mit Hilfe von Sysinternals.com Hex2Dec.exe
rem === Hilfsvariable %HEX%// Hilfsdatei "DEC.TXT"
set hex=%zahl%
hex2dec "0x"+"%hex%" > dec.txt & REM === hex2dec.exe verlangt für Hex-Umrechnung "0x" als Prefix
FOR /F "tokens=3 delims= " %%i in (dec.txt) do set dec=%%i & REM === OUTPUT z.B. 0x20 = 32
del dec.txt >nul
set zahl=%dec%
echo %zahl% > zahl.txt & REM Achtung HEX-Wert(!) // Für weitere HEX-Verarbeitung %hex% nehmen!
rem === AUSGABE (2) Zwischenergebnis - zwecks Überpüfung! Kann gelöscht werden
@echo (2) ZAHL %zahl% --- DEC %dec% --- Hex %hex%
endlocal
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 80289
Url: https://administrator.de/contentid/80289
Ausgedruckt am: 25.11.2024 um 01:11 Uhr
5 Kommentare
Neuester Kommentar
Hallo Andichrist!
Fändest Du es so besser:
Grüße
bastla
P.S.: Was machst Du eigentlich damit?
[Edit] Berücksichtigung von %h1%-Werten über 10 ergänzt. [/Edit]
Fändest Du es so besser:
@echo off & setlocal
rem === Zählschleife DEC 1-255 / Umrechnung in HEX-Wert
rem === Ohne Einsatz von Hilfsprogrammen
if not exist "zahl.txt" (
set /a zahl=0
) else (
rem - Schritt 1: Wert aus "zahl.txt" auslesen
set /p zahl=<"zahl.txt"
)
set /a zahl+=1
if %zahl%==256 set /a zahl=1
rem === UMrechnung DEC->HEX
set dec=%zahl%
set /a h1=%dec%/16
set /a h2=%dec%-%h1%*16
if %h1%==15 set h1=F
if %h1%==14 set h1=E
if %h1%==13 set h1=D
if %h1%==12 set h1=C
if %h1%==11 set h1=B
if %h1%==10 set h1=A
if %h2%==15 set hex=%h1%F
if %h2%==14 set hex=%h1%E
if %h2%==13 set hex=%h1%D
if %h2%==12 set hex=%h1%C
if %h2%==11 set hex=%h1%B
if %h2%==10 set hex=%h1%A
if %h2% lss 10 set hex=%h1%%h2%
set zahl=%hex%
rem === AUSGABE (1) Zwischenergebnis - zwecks Überpüfung! Kann gelöscht werden
@echo (1) ZAHL %zahl% --- DEC %dec% --- Hex %hex%
rem === %zahl% wieder in DEC-wert für Zählschleife umrechnen!
rem === Und Wert an Zahl.txt übergeben
rem === UMrechnung HEX->DEc
set /a dec=0x%zahl%
set zahl=%dec%
echo %zahl% >"zahl.txt" & REM Achtung HEX-Wert(!) // Für weitere HEX-Verarbeitung %hex% nehmen!
rem === AUSGABE (2) Zwischenergebnis - zwecks Überpüfung! Kann gelöscht werden
@echo (2) ZAHL %zahl% --- DEC %dec% --- Hex %hex%
Grüße
bastla
P.S.: Was machst Du eigentlich damit?
[Edit] Berücksichtigung von %h1%-Werten über 10 ergänzt. [/Edit]
... ob "Optimierung" überhaupt der richtige Begriff ist? Anyhow - zumindest leserlicher sollte es so sein:
":Convert" wäre eigentlich eine Function, aber die gibt es ja in Batch nicht ...
Grüße
bastla
@echo off & setlocal
rem === Zählschleife DEC 1-255 / Umrechnung in HEX-Wert
rem === Ohne Einsatz von Hilfsprogrammen
if not exist "zahl.txt" (
set /a zahl=0
) else (
rem - Schritt 1: Wert aus "zahl.txt" auslesen
set /p zahl=<"zahl.txt"
)
set /a zahl+=1
if %zahl%==256 set /a zahl=1
rem === UMrechnung DEC->HEX
set dec=%zahl%
set /a h1=%dec%/16
set /a h2=%dec%-%h1%*16
if %h1% geq 10 call :Convert %h1%
if %h1% geq 10 set h1=%h%
if %h2% geq 10 call :Convert %h2%
if %h2% geq 10 set h2=%h%
set hex=%h1%%h2%
set zahl=%hex%
rem === AUSGABE (1) Zwischenergebnis - zwecks Überpüfung! Kann gelöscht werden
@echo (1) ZAHL %zahl% --- DEC %dec% --- Hex %hex%
rem === %zahl% wieder in DEC-wert für Zählschleife umrechnen!
rem === Und Wert an Zahl.txt übergeben
rem === UMrechnung HEX->DEc
set /a dec=0x%zahl%
set zahl=%dec%
echo %zahl% >"zahl.txt" & REM Achtung HEX-Wert(!) // Für weitere HEX-Verarbeitung %hex% nehmen!
rem === AUSGABE (2) Zwischenergebnis - zwecks Überpüfung! Kann gelöscht werden
@echo (2) ZAHL %zahl% --- DEC %dec% --- Hex %hex%
goto :eof
:Convert
if %1==15 set h=F
if %1==14 set h=E
if %1==13 set h=D
if %1==12 set h=C
if %1==11 set h=B
if %1==10 set h=A
goto :eof
Grüße
bastla