andichrist
Goto Top

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! face-wink

- Vielleicht gibt es auch einen einfacheren/ besseren Weg zum Ziel zu kommen als Meiner - ich hoffe es! face-smile


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

Content-ID: 80289

Url: https://administrator.de/contentid/80289

Ausgedruckt am: 25.11.2024 um 01:11 Uhr

bastla
bastla 08.02.2008 um 22:42:38 Uhr
Goto Top
Hallo Andichrist!

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]
Andichrist
Andichrist 08.02.2008 um 22:53:57 Uhr
Goto Top
P.S.: Was machst Du eigentlich damit?

Ähmm!

Das willst Du gar nicht wissen! *grins* face-smile

Feedback kommt gleich!

Vorab danke

Andichrist
bastla
bastla 08.02.2008 um 22:55:10 Uhr
Goto Top
Hallo Andichrist!

Hatte noch etwas hinzuzufügen - bitte neue Version verwenden (ist aber auch noch nicht optimiert) ...

Grüße
bastla
bastla
bastla 08.02.2008 um 23:16:53 Uhr
Goto Top
... ob "Optimierung" überhaupt der richtige Begriff ist? Anyhow - zumindest leserlicher sollte es so sein:
@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
":Convert" wäre eigentlich eine Function, aber die gibt es ja in Batch nicht ...

Grüße
bastla
Andichrist
Andichrist 08.02.2008 um 23:31:39 Uhr
Goto Top
... ob "Optimierung" überhaupt
der richtige Begriff ist? Anyhow - zumindest
leserlicher sollte es so sein:

Es sieht für mich erstens professioneller (+ meine Rechtschreibfehler face-wink) aus, als meine Version und zweitens ist es eine Lösung ohne "Hilfsprogramm" (das wollte ich doch! face-smile)

Deine Routine habe ich soeben getestet! Tolle Lösung und funktioniert >>einwandfrei<<!

Ich danke Dir!

Gruß
Andichrist

PS: Die Routine wird benötigt um den letzten zweistelligen Wert der MAC-Adresse zu ändern!