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-Key: 193783

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

Printed on: April 18, 2024 at 16:04 o'clock

Member: bastla
bastla Nov 06, 2012 at 08:38:24 (UTC)
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
Member: einfachBernd
einfachBernd Nov 06, 2012 at 08:45:26 (UTC)
Goto Top
Hi bastla face-smile

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

 setlocal enabledelayedexpansion 
hat mal wieder gefehlt ;)
Member: einfachBernd
einfachBernd Nov 14, 2012 at 09:19:24 (UTC)
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
Member: degNLB
degNLB Nov 14, 2012 updated at 09:30:31 (UTC)
Goto Top
Zeile 8 hast du in der Klammer (1,1,99999) zu stehen, anstatt die Lösung von Bastla "(100001,1,199999)"
Member: einfachBernd
einfachBernd Nov 14, 2012 at 09:32:02 (UTC)
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
Member: degNLB
degNLB Nov 14, 2012 at 09:37:10 (UTC)
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
Member: einfachBernd
einfachBernd Nov 14, 2012 at 09:42:21 (UTC)
Goto Top
ok das schon, aber das ist für mich keine saubere Lösung.

Muss sauber auch gehen ;)
Member: degNLB
degNLB Nov 14, 2012 at 09:47:15 (UTC)
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
Member: bastla
bastla Nov 14, 2012 updated at 11:10:04 (UTC)
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
Member: einfachBernd
einfachBernd Nov 14, 2012 at 11:45:43 (UTC)
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 ;)
Member: bastla
bastla Nov 14, 2012 at 14:11:45 (UTC)
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