nagus
Goto Top

Variable im Script hoch zählen

Hi,
ich stehe gerade auf dem Schlauch:

in einem Script benötige ich die Funktion, das aus einem Verzeichnis "Verzeichnis10" eine Datei in ein Verzeichnis "10" kopiert wird.
Da die Verzeichnisse nicht konsistent nummeriert sind und ich mir die Fehler in der log Datei schenken möchte, sieht mein mein Ansatz derzeit wie folgt aus:

:robocopy
Set zaehler=10
if exist  d:\Verzeichnis\Verzeichnis%zaehler% robocopy d:\Verzeichnis\Verzeichnis%zaehler% d:\Verzeichnis\%zaehler% nfpc.* /w:30 /R:10 /V /TS /NP /log+:d:\Copy.log
Set zaehler=%zaehler%+1
if %zaehler%==25 goto Ende
goto robocopy

:ende


Das blöde ist nun nur: der zählt mir die Variable nicht hoch und bleibt immer bei 10. GRRRR

Nagus

Content-Key: 154452

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

Printed on: April 25, 2024 at 19:04 o'clock

Member: bastla
bastla Nov 05, 2010 at 15:09:31 (UTC)
Goto Top
Hallo Nagus!

Wenn gerechnet werden soll, dann musst Du das auch klarstellen:
set /a zaehler=%zaehler%+1
bzw kürzer:
set /a zaehler+=1
Da Du aber sowieso immer von 10 bis 25 zählen willst, könntest Du auch eine "for /L"-Schleife verwenden ...

Grüße
bastla
Member: Nagus
Nagus Nov 05, 2010 at 16:22:59 (UTC)
Goto Top
Hi bastla,
danke!
Mit der for Schleife dachte ich mir schon, aber da tue ich mich meist ein bisserl schwer .... face-wink
Gruß
Nagus
Member: bastla
bastla Nov 05, 2010 at 17:37:51 (UTC)
Goto Top
Hallo Nagus!

Na ja, aber
for /L %i in (10,1,25) do @echo if exist d:\Verzeichnis\Verzeichnis%i robocopy d:\Verzeichnis\Verzeichnis%i d:\Verzeichnis\%i nfpc.* /w:30 /R:10 /V /TS /NP /log+:d:\Copy.log
(zum Testen direkt an der Kommandozeile, und daher nur mit %i anstatt %%i und einem "@echo") ist dann aber auch nicht so wahnsinnig kompliziert ...

Grüße
bastla
Member: Nagus
Nagus Nov 05, 2010 at 17:49:45 (UTC)
Goto Top
Stimmt ist simpel.
Ich hau nur noch einige Formatierungen in das Log rein, damit es besser lesbar wird. Dabei wird dann die Zeile mit der For Schleife und den Pipes so lang, dass ich immer den Überblick verliere und die Tests unübersichtlich werden.
Aber mal sehen - ist eine Option für die Zukunft face-wink
Gruß
Nagus
(glücklich weil das Script sauber läuft)
Member: bastla
bastla Nov 05, 2010 at 18:02:43 (UTC)
Goto Top
Hallo Glücklicher face-wink!

Du kannst in einem Batch ja auch etwas strukturieren:
for /L %%i in (10,1,25) do (
    if exist d:\Verzeichnis\Verzeichnis%%i (
        echo Jetzt geht's los mit Verzeichnis%%i!  
        robocopy d:\Verzeichnis\Verzeichnis%%i d:\Verzeichnis\%%i nfpc.* /w:30 /R:10 /V /TS /NP /log+:d:\Copy.log
        echo Das war's fuer Verzeichnis%%i.  
        echo\
    )
)
...und wenn Du an die letzte Klammer noch ein
>D:\Info.log
hängst, landen alle "echo"-Ausgaben in einer Datei ...

Falls Du allerdings Timestamps einbauen wolltest - etwa
        echo Am %date% um %time% geht's los mit Verzeichnis%%i!
müsstest Du dafür "delayedExpansion" verwenden, da ansonsten für %date%und %time% immer die Werte zu Beginn der Schleife verwendet würden.

Grüße
bastla
Member: Nagus
Nagus Nov 06, 2010 at 12:30:55 (UTC)
Goto Top
Danke für die Mühe!

Wird aber bestimmt nicht meine letzte Frage sein face-wink
Nagus