Batch: Variable verzögert
Von: , Frage gestellt am Mi, 6. Sep 2006
Hallo,
Ich bins nochmal :-)
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 :-(
Gruß
Chris
