Hi,
I need a script that inserts a number at some point into a file path, like this: from C:\WINDOWS\system32\ansi.sys to C:\WINDOWS\system32\5.ansi.sys
I made a function using a label and it seems to work fine, until I invoke it from within a FOR loop.
This is the code I wrote:
@ECHO OFF
SET PATHTOPROCESS="C:\WINDOWS\system32\ansi.sys"
call :GetNewFilePath NEWPATH %PATHTOPROCESS% 7
echo New file name: %NEWPATH%
call :GetNewFilePath NEWPATH %PATHTOPROCESS% 5
echo New file name: %NEWPATH%
FOR /L %%i in (1,1,2) DO (
call :GetNewFilePath NEWPATH %PATHTOPROCESS% %%i
echo New file name in FOR loop: %NEWPATH%
)
goto :eof
:GetNewFilePath
SETLOCAL
SET PINDEX=%~3
SET PDIRECTORY=%~dp2
SET PFILE=%~nx2
SET LocalVar1=%PDIRECTORY%%PINDEX%.%PFILE%
ENDLOCAL & IF "%~1" NEQ "" SET %~1=%LocalVar1%
goto :eof
and this is the output I get:
New file name: C:\WINDOWS\system32\7.ansi.sys
New file name: C:\WINDOWS\system32\5.ansi.sys
New file name in FOR loop: C:\WINDOWS\system32\5.ansi.sys
New file name in FOR loop: C:\WINDOWS\system32\5.ansi.sys
and this is what I expect:
New file name: C:\WINDOWS\system32\7.ansi.sys
New file name: C:\WINDOWS\system32\5.ansi.sys
New file name in FOR loop: C:\WINDOWS\system32\1.ansi.sys
New file name in FOR loop: C:\WINDOWS\system32\2.ansi.sys
It seems that in the FOR loop, the variable is reverted back to the value it had before calling the function. Is there some special trick required for this when using FOR?
Thank you.