|
Answer» I wrote the FOLLOWING, and am having trouble at the indicated location:
Code: [Select]REM SPLIT.BAT @ECHO OFF SETLOCAL EnableDelayedExpansion SET STRING=%1 SET STRING=%STRING:~1,-1% ECHO %STRING%>x & FOR %%A IN (x) DO SET /A STRLENGTH=%%~zA - 2 & DEL x SET SEMINUM=0 FOR /L %%I IN (0,1,%STRLENGTH%) DO IF "!STRING:~%%I,1!" EQU ";" ( SET /A SEMINUM=!SEMINUM!+1 SET K.!SEMINUM!=%%I ) SET /A %2.0=%SEMINUM%+1 SET /A I=%SEMINUM%+1 SET /A K.%I%=%STRLENGTH% SET L=0 FOR /L %%I IN (1,1,%I%) DO IF "1" EQU "1" ( SET J=!K.%%I! REM --------------------------------------------------------- REM None of these is correct REM SET %2.%%I=!STRING:~!L!,!J!! SET %2A.%%I=%STRING:~!L!,!J!% SET %2B.%%I=%%STRING:~!L!,!J!%% REM --------------------------------------------------------- SET /A L=!J!+1 ) @ECHO ON SET %2. SET %2A. SET %2B.
Here are the results I get:
>SPLIT.BAT "ONE;TWO;THREE;FOUR;FIVE;SIX" VAR
>SET VAR. VAR.0=6 VAR.1=ONE;TWO;THREE;FOUR;FIVE;SIXLJ VAR.2=ONE;TWO;THREE;FOUR;FIVE;SIXLJ VAR.3=ONE;TWO;THREE;FOUR;FIVE;SIXLJ VAR.4=ONE;TWO;THREE;FOUR;FIVE;SIXLJ VAR.5=ONE;TWO;THREE;FOUR;FIVE;SIXLJ VAR.6=ONE;TWO;THREE;FOUR;FIVE;SIXLJ
>SET VARA. VARA.1=STRING:~0,3 VARA.2=STRING:~4,7 VARA.3=STRING:~8,13 VARA.4=STRING:~14,18 VARA.5=STRING:~19,23 VARA.6=STRING:~24,28
>SET VARB. VARB.1=%STRING:~0,3% VARB.2=%STRING:~4,7% VARB.3=%STRING:~8,13% VARB.4=%STRING:~14,18% VARB.5=%STRING:~19,23% VARB.6=%STRING:~24,28%
Is this possible? Thanks in ADVANCE for any help you might provide.I can see why the error is there. You cannot USE two delayed variables as you have shown, to separate a string using another delayed variable.
If you supply an input string and DESCRIBE what you need to do then there may be better ways to do it.I am not sure what you are trying to do or why your input to your batch file would be like. This gives some better output but it still don't look right. Code: [Select]REM SPLIT.BAT @ECHO OFF SETLOCAL EnableDelayedExpansion SET STRING=%1 SET STRING=%STRING:~1,-1% ECHO %STRING%>x & FOR %%A IN (x) DO SET /A STRLENGTH=%%~zA - 2 & DEL x SET SEMINUM=0 FOR /L %%I IN (0,1,%STRLENGTH%) DO IF "!STRING:~%%I,1!" EQU ";" ( SET /A SEMINUM=!SEMINUM!+1 SET K.!SEMINUM!=%%I ) SET /A %2.0=%SEMINUM%+1 SET /A I=%SEMINUM%+1 SET /A K.%I%=%STRLENGTH% SET L=0 FOR /L %%I IN (1,1,%I%) DO IF "1" EQU "1" ( SET J=!K.%%I! REM --------------------------------------------------------- REM None of these is correct REM CALL SET %2.%%I=%%STRING:~!L!,!J!%% CALL SET %2A.%%I=%%STRING:~!L!,!J!%% CALL SET %2B.%%I=%%STRING:~!L!,!J!%% REM --------------------------------------------------------- SET /A L=!J!+1 ) @ECHO ON SET %2. SET %2A. SET %2B.Output Code: [Select]C:\Users\Squashman\Batch\split>SPLIT.BAT "ONE;TWO;THREE;FOUR;FIVE;SIX" VAR
C:\Users\Squashman\Batch\split>REM SPLIT.BAT
C:\Users\Squashman\Batch\split>SET VAR. VAR.0=6 VAR.1=ONE VAR.2=TWO;THR VAR.3=THREE;FOUR;FI VAR.4=FOUR;FIVE;SIX VAR.5=FIVE;SIX VAR.6=SIX
C:\Users\Squashman\Batch\split>SET VARA. VARA.1=ONE VARA.2=TWO;THR VARA.3=THREE;FOUR;FI VARA.4=FOUR;FIVE;SIX VARA.5=FIVE;SIX VARA.6=SIX
C:\Users\Squashman\Batch\split>SET VARB. VARB.1=ONE VARB.2=TWO;THR VARB.3=THREE;FOUR;FI VARB.4=FOUR;FIVE;SIX VARB.5=FIVE;SIX VARB.6=SIX
C:\Users\Squashman\Batch\split>Thanks, I needed that.
|