1.

Solve : Help Needed : String Split issue in for loop... while process folders?

Answer»

Hello Everybody,

I am problem splinting the string in a loop.  I have a subroutine (:STRING_SPLIT ) that splits the string by delimiter and return the split value.  But the returned value is empty.
So for the debug purpose I called ":STRING_SPLIT"  in another wrapper subroutine ":SPLIT_WRAP" to check if the string split value is retuned and yes I am getting the value I want.
But I am not getting this string split value in the main.

My Requirement:-
-----------------------
I have a FOLDER structure like

+PHASE1         ( Directory)
++PREFERENCES    ( Sub - Directory)
+++SITE       ( Sub Sub - Directory)
+++GROUP      ( Sub Sub - Directory)
++++FIlE1.xml
++++FIlE2.xml
++++RUN.bat

Code:-
-----------------
Code: [Select]:: Set TITLE name...
SET JOB_TITLE=Executing:{ %ROOT_FOLDER% }
TITLE %JOB_TITLE%

ECHO #=================== START:: %ROOT_FOLDER% ========================#
FOR /f "tokens=*" %%D IN ('DIR /B /AD /ON') DO (
    ECHO #---"%%D"---#
    CD "%%D"
FOR /f "tokens=*" %%F IN ('DIR /B *') DO (
IF /I "%%D"=="Preferences" (
REM ECHO Importing file "%%F"...
IF /I "%%F"=="group" (
REM ECHO DO NOTHING..
CALL :LOAD_SUB "group" %%D
) ELSE IF /I "%%F"=="role" ( 
REM ECHO DO NOTHING..
CALL :LOAD_SUB "role" %%D
ECHO.
) ELSE (
ECHO Importing file "%%F"...
)
)
)
    CD ..
)
ECHO #=================== END:: %ROOT_FOLDER% ==========================#
cmd

:endext
endlocal
set EXITVALUE=%ERRORLEVEL%


:LOAD_SUB
::SETLOCAL
ECHO.
::SET CURRENT_DIR=%~1
REM ECHO I am processing %~1 preferences.
ECHO #---"%~2":"%~1"---#
CD "%~1"
FOR /f "tokens=*" %%P IN ('DIR /B *') DO (
:: IF EXIST *.xml( ECHO Importing file "%%P"... )
ECHO Processing file/directory "%%P"...
:: ECHO.CURRENT_DIR : %CURRENT_DIR%
    IF /I "%~2"=="Preferences" (

IF /I "%~1"=="role" (

CALL:STRING_SPLIT "%%P" "." "FileName" "FileExtn"
ECHO.FileName : %FileName%  REM $$$ ERROR : EMPTY VALUE
ECHO.FileExtn : %FileExtn%  REM $$$ ERROR : EMPTY VALUE
IF /I "%FileExtn%"=="XML" (

:: CALL IMPORT COMMAND
:: CALL :IMPORT_PREFERENCES "%%P"
)
)
)
)
CD..
::ENDLOCAL
GOTO:EOF


:STRING_SPLIT
:: CALL:STRING_SPLIT %data% "." "FileName" "FileExtn"
SETLOCAL ENABLEDELAYEDEXPANSION
 SET MY_STRING=%~1
 SET DELIMITER_CHAR=%~2
 ::ECHO.MY_STRING : %MY_STRING%
 ::ECHO.DELIMITER_CHAR : %DELIMITER_CHAR%
FOR /f "tokens=1* delims=%DELIMITER_CHAR%" %%x IN ("%MY_STRING%") DO SET FileName=%%x&SET FileExtn=%%y
::ECHO.FileName : %FileName%
::ECHO.FileExtn : %FileExtn%
ENDLOCAL & SET %~3=%FileName% & SET %~4=%FileExtn%
::exit /b
GOTO:EOF

:SPLIT_WRAP
SETLOCAL
SET tSTRING=%~1
SET DEL_CHAR=%~2
ECHO.tSTRING : %tSTRING%
ECHO.DEL_CHAR : %DEL_CHAR%
CALL :STRING_SPLIT %tSTRING% %DEL_CHAR% "FileName" "FileExtn"
ECHO.FileName : %FileName%
ECHO.FileExtn : %FileExtn%
ENDLOCAL & (SET %~3=%FileName%) & ( SET %~4=%FileExtn% )
GOTO:EOF
Also posted on DosTips.
http://www.dostips.com/forum/viewtopic.php?f=3&t=6219 Quote from: mskavim on January 25, 2015, 02:30:08 PM

I am problem splinting the string in a loop.

My Requirement:-
-----------------------
I have a folder structure like

Code: [Select]+PHASE1         ( Directory)
++PREFERENCES    ( Sub - Directory)
+++SITE       ( Sub Sub - Directory)
+++GROUP      ( Sub Sub - Directory)
++++FIlE1.xml
++++FIlE2.xml
++++RUN.bat

What are you trying to do to the listing?  It can be more FUN to derive a solution than to READ long code which is broken.


Discussion

No Comment Found