Batch: Variable verzögert

Hallo,
Ich bins nochmal :smile:
Ich habe ein eigenartiges Problem. Wenn ich mit SET einer Variablen in einer Schleife einen Wert zuweise, dann erhält sie magischerweise erst im nächsten Durchlauf diesen Wert. Hier ist das Phänomen beschrieben

http://www.robvanderwoude.com/index.html

Mein Batch programm soll eine Zahl modulo 25 ausrechnen. Also 24 wird 0, 26 wird 25 und 51 wird 50. Mein Code bisher:

set FOLDERFILTER=2006
set FILEFILTER=Z_???*.*
set FOLDER_DEST=dest

set COUNT=0
for /R %%i in (%FOLDERFILTER%) do (
rem echo 1=%%i
if exist %%i (
rem echo 2=%%i
for /F „delims==“ %%j in (‚dir „%%i%FILEFILTER%“ /b /s /a-d‘) do (
rem echo 3=%%j
set FILE_PATH=%%j
set FILE_NAME=%%~nj
set FILE_TIME=%%~tj
call :subroutine_copy_file %%j
)
)
)
goto end

subroutine_copy_file

echo 4=%*
set NUMBER=%FILE_NAME:~2,4%
set POSTFIX=%FILE_NAME:~6,1%
echo number1=%NUMBER%
echo rest=%POSTFIX%
if %NUMBER% GEQ 0000 (
if %NUMBER% LEQ 9999 (
rem echo number ok
if %POSTFIX% NEQ „geändert“ (
set /a TARGET = %NUMBER% %% 25
echo target1=%TARGET%
set /a TARGET=NUMBER-TARGET
set /a COUNT=COUNT+1
)
)
)
goto:EOF

Und hier die Ausgabe:

C:\Chris_private\b>a.bat

4=C:\Chris_private\b\source\kundeA\2006\Z_0099Ä.xls
number1=0099
rest=Ä
Ungültige Zahl. Nummerische Konstanten sind entweder dezimale (17),
hexadezimale (0x11) oder oktale (021) Zahlen.
Ungültige Zahl. Nummerische Konstanten sind entweder dezimale (17),
hexadezimale (0x11) oder oktale (021) Zahlen.
target1=1225
4=C:\Chris_private\b\source\kundeA\2006\Z_1234N.xls
number1=1234
rest=N
target1=-1225
4=C:\Chris_private\b\source\kundeA\2006\Z_3971A.xls
number1=3971
rest=A
target1=1225
4=C:\Chris_private\b\source\kundeA\2006\Z_4321N2.xls
number1=4321
rest=N
target1=3950
4=C:\Chris_private\b\source\kundeA\2006\projekt1\Z_1234Z.xls
number1=1234
rest=Z
target1=4300
number of files copied: 5

Kann mir jeman helfen? Das Programm ist ja fast fertig. Es fehlt nur noch dieses Problem :frowning:

Gruß
Chris

Hi,

also irgendwie bin ich über die Sache mit dem Modulo gestolpert, eigentlich ist das doch allgemein 25*(Zahl DIV 25)

set /a TARGET = %NUMBER% %% 25

Hier soll das dann auch passieren, oder? Müsste es nicht

set /a TARGET = %NUMBER% / 25
set /a TARGET = %TARGET% * 25

sein?

mfg
Matze

Hallo.

Ich bins nochmal :smile:

Ich auch. :wink:

subroutine_copy_file

echo 4=%*
set NUMBER=%FILE_NAME:~2,4%
set POSTFIX=%FILE_NAME:~6,1%
echo number1=%NUMBER%
echo rest=%POSTFIX%
if %NUMBER% GEQ 0000 (
if %NUMBER% LEQ 9999 (
rem echo number ok
if %POSTFIX% NEQ „geändert“ (
set /a TARGET = %NUMBER% %% 25
echo target1=%TARGET%
set /a TARGET=NUMBER-TARGET
set /a COUNT=COUNT+1
)
)
)
goto:EOF

Und hier die Ausgabe:

C:\Chris_private\b>a.bat

4=C:\Chris_private\b\source\kundeA\2006\Z_0099Ä.xls
number1=0099
rest=Ä
Ungültige Zahl. Nummerische Konstanten sind entweder dezimale
(17),
hexadezimale (0x11) oder oktale (021) Zahlen.
Ungültige Zahl. Nummerische Konstanten sind entweder dezimale
(17),
hexadezimale (0x11) oder oktale (021) Zahlen.
target1=1225

Das Problem ist, dass Zahlen mit führenden 0en als Zahlen im 8er-System behandelt werden, also nur die Ziffern 0 bis einschließlich 7 enthälten dürfen. Da die Zahlen bei dir aber Dezimalzahlen sind, geht das schief. Du musst aus den Variablen führende 0en ausfiltern, bevor du sie innerhalb von „set /a“ - wo sie als Zahlen interpretiert werden sollen - nutzen kannst.

Gruß,
Sebastian.

Ja, da gebe ich Dir Recht. Aber in der Ausgabe stimmt es komischerweise. Ich habe mein Problem gelöst, indem ich den SET Befehl vor die IF Anweisung geschoben habe!
Grüße
Chris

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]