I'm doing a job, copying files from one location to another location using BATCH file. I split my statements into three parts, one program driver, one for generating file list under each sub-directory, and one for checking file name & doing actual copy stuff.
1.PROGRAM DRIVER
IF EXIST TEMP.TXT DEL TEMP.TXT
CD>TEMP.TXT
set /p ROOT=<TEMP.TXT
rem PARA is the date to copy
SET PARA=2013-08-06
ECHO %PARA%
CD %ROOT%\%PARA%
FOR /R %%A IN (.) DO ( ::COPY SUB-LOGIC FILE TO EACH SUB-DIRECTORY
ECHO NOW IN %%A
CD %%A
XCOPY "%ROOT%\WORK.BAT" . /K /Y
XCOPY "%ROOT%\CORE.BAT" . /K /Y
ECHO LOOP OUT.
)
CD %ROOT%\%PARA%
FOR /R %%A IN (.) DO (
ECHO NOW IN %%A
CD %%A
CALL WORK.BAT ::GENERATING FILE LIST
ECHO LOOP OUT.
)
CD %ROOT%\%PARA%
FOR /R %%A IN (.) DO (
ECHO NOW IN %%A
CD %%A
CALL CORE.BAT ::DOING COPY STUFF
ECHO LOOP OUT.
)
PAUSE
2.WORK.BAT
IF EXIST FILE.TXT DEL FILE.TXT
FOR %%B IN (*.wav) DO ECHO %%~nxB>>FILE.TXT
3.COPYING STUFF
FOR %%F IN ("%CD%") DO SET CURDIR=%%~nxF
IF NOT EXIST FILE.TXT GOTO END
SET CCC="FALSE" ::IF NO CCC DECLARED HERE,BELOW FOR LOOP WILL BE SKIPPED
PAUSE
FOR /F %%C IN (FILE.TXT) DO (
SETLOCAL
SET RES="FALSE"
IF "%%C" GEQ "CH201_00000000_000.WAV" SET RES="TRUE"
IF "%%C" LEQ "CH300_FFFFFFFF_FFF.WAV" (
SET RES="TRUE"
) ELSE ( SET RES="FALSE")
ENDLOCAL& SET CCC=%RES% *::VAR CCC NOT UPDATED*
PAUSE
IF %CCC% EQU "TRUE" (
IF NOT EXIST D:\PHILIPS\%PARA%\%PARA%\%CURDIR% MD D:\PHILIPS\%PARA%\%PARA%\%CURDIR%
XCOPY "%ROOT%\%PARA%\%CURDIR%\%%C" D:\PHILIPS\%PARA%\%PARA%\%CURDIR% /K /Y
)
)
:END
ECHO LOOP OUT
My question is, why my "ENDLOCAL & SET" statement not working, i.e., NULL each time, as pictures show. How can I change my statements to make it work as expected?


I changed part 3 to
FOR %%F IN ("%CD%") DO SET CURDIR=%%~nxF
IF NOT EXIST FILE.TXT GOTO END
SET "RES="
PAUSE
FOR /F %%C IN (FILE.TXT) DO (
SET "RES="
IF "%%C" GEQ "CH201_00000000_000.WAV" SET "RES=Y"
IF "%%C" LEQ "CH300_FFFFFFFF_FFF.WAV" (
SET "RES=Y"
) ELSE ( SET "RES=" )
PAUSE
IF DEFINED RES (
IF NOT EXIST D:\PHILIPS\%PARA%\%PARA%\%CURDIR% MD D:\PHILIPS\%PARA%\%PARA%\%CURDIR%
XCOPY "%ROOT%\%PARA%\%CURDIR%\%%C" D:\PHILIPS\%PARA%\%PARA%\%CURDIR% /K /Y
)
)
It seems that RES always defined, even FILENAME is in specified ranges. In this case, it copied wrong files.

cmdtag as NIXers use batchfiles too. BTW: You can redirectcmdoutput to a file by using *yourbatchname >*afilename* - that should make it easier to post runtime reports - no need for images.