Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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
GELÖST

Batch - Zählschleife von 1-255 mit Umrechnung in Hexadezimal-Werte

Frage Entwicklung Batch & Shell

Mitglied: Andichrist

Andichrist (Level 1) - Jetzt verbinden

08.02.2008, aktualisiert 23:31 Uhr, 10034 Aufrufe, 5 Kommentare

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!

01.
@echo off & setlocal 
02.
 
03.
 
04.
rem === Zählschleife  DEC 16-255 / Umrechnung in HEX-Wert 
05.
rem === Umrechnen erst ab DEC 16 um zweistelligen "10" HEX-Wert zu erhalten  
06.
rem === Mit Einsatz des Hilfsprogramm Hex2dec.exe / http://technet.microsoft.com/de-de/sysinternals/bb896736(en-us).aspx 
07.
 
08.
if not exist "zahl.txt" set /a zahl=15 
09.
 
10.
rem - Schritt 1: Wert aus "zahl.txt" auslesen  
11.
for /f %%i in (zahl.txt) do set /a zahl=%%i 
12.
set /a zahl=zahl+1 
13.
if %zahl%==256 set /a zahl=16 
14.
 
15.
rem === UMrechnung DEC->HEX mit Hilfe von Sysinternals.com Hex2Dec.exe 
16.
rem ===  Hilfsvariable %DEC%// Hilfsdatei "Hex.TXT" 
17.
set dec=%zahl% 
18.
hex2dec "%dec%" > hex.txt 
19.
FOR /F "tokens=3 delims= " %%i in (hex.txt) do set hex=%%i & REM === OUTPUT z.B. 32 = 0x20 
20.
del hex.txt>nul 
21.
set hex=%hex:~2,4%  & REM === Zerlegen des Wertes z.B. 0x20  - OUTPUT: 20 
22.
 
23.
set zahl=%hex% 
24.
 
25.
rem === AUSGABE (1) Zwischenergebnis - zwecks Überpüfung! Kann gelöscht werden 
26.
@echo (1) ZAHL %zahl% --- DEC %dec% --- Hex %hex% 
27.
 
28.
rem === %zahl% wieder in  DEC-wert für Zählschleife umrechnen! 
29.
rem === Und Wert an Zahl.txt übergeben 
30.
rem === UMrechnung HEX->DEc mit Hilfe von Sysinternals.com Hex2Dec.exe 
31.
rem ===  Hilfsvariable %HEX%// Hilfsdatei "DEC.TXT" 
32.
 
33.
set hex=%zahl% 
34.
 
35.
hex2dec "0x"+"%hex%" > dec.txt & REM === hex2dec.exe verlangt für Hex-Umrechnung "0x" als Prefix 
36.
FOR /F "tokens=3 delims= " %%i in (dec.txt) do set dec=%%i & REM ===  OUTPUT z.B. 0x20 = 32 
37.
del dec.txt >nul 
38.
set zahl=%dec% 
39.
 
40.
 
41.
echo %zahl% > zahl.txt  & REM Achtung HEX-Wert(!) // Für weitere HEX-Verarbeitung %hex% nehmen!  
42.
 
43.
rem === AUSGABE (2) Zwischenergebnis - zwecks Überpüfung! Kann gelöscht werden 
44.
@echo (2) ZAHL %zahl% --- DEC %dec% --- Hex %hex% 
45.
 
46.
endlocal
Mitglied: bastla
08.02.2008 um 22:42 Uhr
Hallo Andichrist!

Fändest Du es so besser:
01.
@echo off & setlocal 
02.
 
03.
rem === Zählschleife  DEC 1-255 / Umrechnung in HEX-Wert 
04.
rem === Ohne Einsatz von Hilfsprogrammen  
05.
 
06.
if not exist "zahl.txt" ( 
07.
	set /a zahl=0 
08.
) else ( 
09.
	rem - Schritt 1: Wert aus "zahl.txt" auslesen  
10.
	set /p zahl=<"zahl.txt" 
11.
12.
 
13.
set /a zahl+=1 
14.
if %zahl%==256 set /a zahl=1 
15.
 
16.
rem === UMrechnung DEC->HEX 
17.
set dec=%zahl% 
18.
set /a h1=%dec%/16 
19.
set /a h2=%dec%-%h1%*16 
20.
 
21.
if %h1%==15 set h1=F 
22.
if %h1%==14 set h1=E 
23.
if %h1%==13 set h1=D 
24.
if %h1%==12 set h1=C 
25.
if %h1%==11 set h1=B 
26.
if %h1%==10 set h1=A 
27.
 
28.
if %h2%==15 set hex=%h1%F 
29.
if %h2%==14 set hex=%h1%E 
30.
if %h2%==13 set hex=%h1%D 
31.
if %h2%==12 set hex=%h1%C 
32.
if %h2%==11 set hex=%h1%B 
33.
if %h2%==10 set hex=%h1%A 
34.
if %h2% lss 10 set hex=%h1%%h2% 
35.
 
36.
set zahl=%hex% 
37.
 
38.
rem === AUSGABE (1) Zwischenergebnis - zwecks Überpüfung! Kann gelöscht werden 
39.
@echo (1) ZAHL %zahl% --- DEC %dec% --- Hex %hex% 
40.
 
41.
rem === %zahl% wieder in  DEC-wert für Zählschleife umrechnen! 
42.
rem === Und Wert an Zahl.txt übergeben 
43.
rem === UMrechnung HEX->DEc 
44.
 
45.
set /a dec=0x%zahl% 
46.
set zahl=%dec% 
47.
 
48.
echo %zahl% >"zahl.txt"  & REM Achtung HEX-Wert(!) // Für weitere HEX-Verarbeitung %hex% nehmen!  
49.
 
50.
rem === AUSGABE (2) Zwischenergebnis - zwecks Überpüfung! Kann gelöscht werden 
51.
@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]
Bitte warten ..
Mitglied: Andichrist
08.02.2008 um 22:53 Uhr
P.S.: Was machst Du eigentlich damit?

Ähmm!

Das willst Du gar nicht wissen! *grins*

Feedback kommt gleich!

Vorab danke

Andichrist
Bitte warten ..
Mitglied: bastla
08.02.2008 um 22:55 Uhr
Hallo Andichrist!

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

Grüße
bastla
Bitte warten ..
Mitglied: bastla
08.02.2008 um 23:16 Uhr
... ob "Optimierung" überhaupt der richtige Begriff ist? Anyhow - zumindest leserlicher sollte es so sein:
01.
@echo off & setlocal 
02.
 
03.
rem === Zählschleife  DEC 1-255 / Umrechnung in HEX-Wert 
04.
rem === Ohne Einsatz von Hilfsprogrammen  
05.
 
06.
if not exist "zahl.txt" ( 
07.
	set /a zahl=0 
08.
) else ( 
09.
	rem - Schritt 1: Wert aus "zahl.txt" auslesen  
10.
	set /p zahl=<"zahl.txt" 
11.
12.
 
13.
set /a zahl+=1 
14.
if %zahl%==256 set /a zahl=1 
15.
 
16.
rem === UMrechnung DEC->HEX 
17.
set dec=%zahl% 
18.
set /a h1=%dec%/16 
19.
set /a h2=%dec%-%h1%*16 
20.
if %h1% geq 10 call :Convert %h1% 
21.
if %h1% geq 10 set h1=%h% 
22.
if %h2% geq 10 call :Convert %h2% 
23.
if %h2% geq 10 set h2=%h% 
24.
set hex=%h1%%h2% 
25.
 
26.
set zahl=%hex% 
27.
 
28.
rem === AUSGABE (1) Zwischenergebnis - zwecks Überpüfung! Kann gelöscht werden 
29.
@echo (1) ZAHL %zahl% --- DEC %dec% --- Hex %hex% 
30.
 
31.
rem === %zahl% wieder in  DEC-wert für Zählschleife umrechnen! 
32.
rem === Und Wert an Zahl.txt übergeben 
33.
rem === UMrechnung HEX->DEc 
34.
 
35.
set /a dec=0x%zahl% 
36.
set zahl=%dec% 
37.
 
38.
echo %zahl% >"zahl.txt"  & REM Achtung HEX-Wert(!) // Für weitere HEX-Verarbeitung %hex% nehmen!  
39.
 
40.
rem === AUSGABE (2) Zwischenergebnis - zwecks Überpüfung! Kann gelöscht werden 
41.
@echo (2) ZAHL %zahl% --- DEC %dec% --- Hex %hex% 
42.
 
43.
goto :eof 
44.
 
45.
:Convert 
46.
if %1==15 set h=F 
47.
if %1==14 set h=E 
48.
if %1==13 set h=D 
49.
if %1==12 set h=C 
50.
if %1==11 set h=B 
51.
if %1==10 set h=A 
52.
goto :eof
":Convert" wäre eigentlich eine Function, aber die gibt es ja in Batch nicht ...

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

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

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!
Bitte warten ..
Neuester Wissensbeitrag
Off Topic

"Ich habe nichts zu verbergen"

(2)

Erfahrungsbericht von FA-jka zum Thema Off Topic ...

Ähnliche Inhalte
Batch & Shell
gelöst Batch: Textdatei Zeilenweise auslesen (2)

Frage von CreatorX zum Thema Batch & Shell ...

Batch & Shell
Verschachtelte For Schleife für Batch Neuling (3)

Frage von yperiu zum Thema Batch & Shell ...

Batch & Shell
gelöst Alle Ordner bis auf die letzten 3 per Batch löschen (5)

Frage von Stefan2733 zum Thema Batch & Shell ...

Batch & Shell
gelöst Fenstertitel von anderen Tasks per batch auslesen (3)

Frage von NetMare zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
CPU, RAM, Mainboards
Kaufberatung für mind. 8 verschiedene HighEnd-Mainboards (23)

Frage von yperiu zum Thema CPU, RAM, Mainboards ...

Mac OS X
Mac kann nicht im LAN pingen alle anderen schon (19)

Frage von smartino zum Thema Mac OS X ...

Hyper-V
Langsames Netzwerk i210 LAN Karte (10)

Frage von Akcent zum Thema Hyper-V ...

Netzwerke
Abisolierwerkzeug (10)

Frage von SarekHL zum Thema Netzwerke ...