einfachbernd
Goto Top

BATCH For Schleife mit führender Null?

Hallo an alle face-smile

Bräuchte Hilfe bei einen Problem wo ich nicht weiterkomme.

for /l %a in (1,1,99999) do ( echo %a )

... %%a soll z.b. 00001 anzeigen
... %%a soll z.b. 91031 anzeigen

Wie richte ich das ein?

Danke face-smile

Content-ID: 193783

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

Ausgedruckt am: 22.11.2024 um 09:11 Uhr

bastla
bastla 06.11.2012 um 09:38:24 Uhr
Goto Top
Hallo einfachBernd!

Lässt sich unmittelbar nicht lösen - in einem Batch entweder ein Unterprogramm oder "delayedExpansion" verwenden, etwa:
setlocal enabledelayedexpansion
for /l %%a in (100001,1,199999) do set "Zahl=%%a" & echo !Zahl:~-5!  
Grüße
bastla
einfachBernd
einfachBernd 06.11.2012 um 09:45:26 Uhr
Goto Top
Hi bastla face-smile

Danke für die schnelle Lösung face-smile

 setlocal enabledelayedexpansion 
hat mal wieder gefehlt ;)
einfachBernd
einfachBernd 14.11.2012 um 10:19:24 Uhr
Goto Top
OK nun habe ich zu dem Thema doch ein Problem bei einem BATCH

echo off
cls

rem SystemSettings
setlocal enabledelayedexpansion 
set name=ATL

for /l %%a in (1,1,99999) do ( 
 set Zahl=%%a
 ping -n 1 -w 1 %name%!Zahl:~-5! >nul 2>nul
 if not errorlevel 1 ( echo OK  - %name%!Zahl:~-5!
                       echo %name%!Zahl:~-5!>> "%~dp0ONLINE.txt") else ( echo XXX - %name%!Zahl:~-5! )  
)

pause

es sollte so sein, dass der Ping bei ATL00001 startet stattdessen kommt aber der Ping auf ATL1

was mache ich falsch?

Danke für Info
degNLB
degNLB 14.11.2012 aktualisiert um 10:30:31 Uhr
Goto Top
Zeile 8 hast du in der Klammer (1,1,99999) zu stehen, anstatt die Lösung von Bastla "(100001,1,199999)"
einfachBernd
einfachBernd 14.11.2012 um 10:32:02 Uhr
Goto Top
Hi degNLB des is aber keine Lösung denn dann hast ja die 5Stellen von Start weg schon ;)

ich möchts von 1 = 00001 weg haben und nicht von 10001 ;)

LG Berni
degNLB
degNLB 14.11.2012 um 10:37:10 Uhr
Goto Top
aber wenn ich mich jetzt nicht irre, dann sind 100001 und 199999 sechsstellig und die Option bzw. der Befehl "!Zahl:~-5!" gibt nur die letzten 5 Stellen aus, d.h. unterm Strich sollte er so von 00001 anfangen zu Zählen
einfachBernd
einfachBernd 14.11.2012 um 10:42:21 Uhr
Goto Top
ok das schon, aber das ist für mich keine saubere Lösung.

Muss sauber auch gehen ;)
degNLB
degNLB 14.11.2012 um 10:47:15 Uhr
Goto Top
aber bei Fragen zu Batch kannst du dem bastla ruhig glauben und vertrauen... er hat Ahnung davon ;)

Und mit Batch lassen sich gewisse Dinge gut und einfach erledigen, aber jede Programmiersprache hat so ihre schwächen, also müsstest du in Powershell, dem großen Bruder, mal nachsehen, ob es dort eine bessere Lösung gibt.
... oder dir eine andere Programmiersprache anlesen, wenn du nicht damit Leben willst :P
bastla
bastla 14.11.2012 aktualisiert um 12:10:04 Uhr
Goto Top
Hallo degNLB!

Danke für Dein Vertrauen face-smile
@ einfachBernd
das ist für mich keine saubere Lösung.
Ich kenne ja Deine Definition von "sauber" nicht - aber wenn Dir sowas lieber wäre
for /l %%a in (0,1,9) do (
    for /L %%b in (0,1,9) do (
        for /l %%c in (0,1,9) do (
            for /l %%d in (0,1,9) do (
                for /l %%e in (0,1,9) do (
                    if "%%a%%b%%c%%d%%e" neq "00000" (  
                        echo %%a%%b%%c%%d%%e
                    )
                )
            )
        )
    )
)
dann nur zu ...

Grüße
bastla
einfachBernd
einfachBernd 14.11.2012 um 12:45:43 Uhr
Goto Top
hi bastla,

war kein angriff gegen dich, nur ich weiß ich hab das schon mal gelöst eben auch mit variable in forschleife mit ! aber mir fehlt ein kontext ;)

der obere code erfüllt seinen zweck ;)
bastla
bastla 14.11.2012 um 15:11:45 Uhr
Goto Top
Hallo einfachBern!

So empfindlich bin ich ja nicht, und die Schleifenvariante war ja auch nicht wirklich ernst gemeint ... face-wink

Was Du schon mal gemacht haben könntest, wäre vielleicht
for /l %%a in (1,1,99999) do (
    set Zahl=0000%%a
    echo !%Zahl:~-5!
)
- eine echte "Zahl" (wäre mit "set /a" zuzuweisen) produzierst Du aber auch in dieser Version nicht ...

Grüße
bastla