Dave
Many thanks, your solution worked perfectly.
There was one problem with my secondary target :-
"I need to add a large block of code to convert each processed file into an indexed array of text"
I found that the variables created by previous use of :NEW_PROC were destroyed each time :NEW_PROC was used.
That was fixed by removing "setlocal enableDelayedExpansion" from :NEW_PROC
This is code OutPut demonstration :-
Mode _S was my original in-line code that took 6 lines.
Mode _T is your single line that takes only 1 line to call :NEW_PROC
Modes _U and _V are your (Type ...) and (Findstr ...) variants which do the same perfect job.
--- starting --- --- starting --- --- starting ---
Original 6 lines of code, using "^<"
:*********************************************
MODE = _S. Files :- OUTER(%1) = File3.TXT; INNER(%2) = File4.TXT.
:==========="('find /n /v "" ^< File4.TXT')"==========
file 3 line 1 of 6 but missing line 2 ####
file 3 line 3 of 6 but missing line 2 ####
file 3 line 4 of 6 but missing line 2 ####
file 3 line 5 of 6 but missing line 2 ####
file 3 line 6 of 6 but missing line 2 ####
New 1 line code, creating variables, using "^<"
:*********************************************
MODE = _T. Files :- OUTER(%1) = File3.TXT; INNER(%2) = File4.TXT.
:=========== ('find /n /v "" < File4.TXT') --------------
file 3 line 1 of 6 but missing line 2 ####
file 3 line 3 of 6 but missing line 2 ####
file 3 line 4 of 6 but missing line 2 ####
file 3 line 5 of 6 but missing line 2 ####
file 3 line 6 of 6 but missing line 2 ####
New 1 line code, creating variables, using "^"
:*********************************************
MODE = _U. Files :- OUTER(%1) = File3.TXT; INNER(%2) = File4.TXT.
:=========== ('findstr /n "^" File4.TXT') --------------
file 3 line 1 of 6 but missing line 2 ####
file 3 line 3 of 6 but missing line 2 ####
file 3 line 4 of 6 but missing line 2 ####
file 3 line 5 of 6 but missing line 2 ####
file 3 line 6 of 6 but missing line 2 ####
New 1 line code, creating variables, using "^|"
:*********************************************
MODE = _V. Files :- OUTER(%1) = File3.TXT; INNER(%2) = File4.TXT.
:=========== ('type File4.TXT | find /n /v ""') --------------
file 3 line 1 of 6 but missing line 2 ####
file 3 line 3 of 6 but missing line 2 ####
file 3 line 4 of 6 but missing line 2 ####
file 3 line 5 of 6 but missing line 2 ####
file 3 line 6 of 6 but missing line 2 ####
ALL TESTS DONE
Generated Variables :-
A_1010=MODE = _S. Files :- OUTER(%1) = File3.TXT; INNER(%2) = File4.TXT.
A_1021=MODE = _T. Files :- OUTER(%1) = File3.TXT; INNER(%2) = File4.TXT.
A_1032=Mode-_T
A_1034=file 3 line 1 of 6 but missing line 2 ####
A_1036=file 3 line 3 of 6 but missing line 2 ####
A_1037=file 3 line 4 of 6 but missing line 2 ####
A_1038=file 3 line 5 of 6 but missing line 2 ####
A_1039=file 3 line 6 of 6 but missing line 2 ####
A_1049=MODE = _U. Files :- OUTER(%1) = File3.TXT; INNER(%2) = File4.TXT.
A_1060=Mode-_U
A_1062=file 3 line 1 of 6 but missing line 2 ####
A_1064=file 3 line 3 of 6 but missing line 2 ####
A_1065=file 3 line 4 of 6 but missing line 2 ####
A_1066=file 3 line 5 of 6 but missing line 2 ####
A_1067=file 3 line 6 of 6 but missing line 2 ####
A_1077=MODE = _V. Files :- OUTER(%1) = File3.TXT; INNER(%2) = File4.TXT.
A_1088=Mode-_V
A_1090=file 3 line 1 of 6 but missing line 2 ####
A_1092=file 3 line 3 of 6 but missing line 2 ####
A_1093=file 3 line 4 of 6 but missing line 2 ####
A_1094=file 3 line 5 of 6 but missing line 2 ####
A_1095=file 3 line 6 of 6 but missing line 2 ####
Press any key to continue . . .
As you can see - I even get indexed arrays to play with.
This is the code that created the above
Code: Select all
@echo off & setlocal EnableDelayedExpansion & CLS
echo --- starting --- --- starting --- --- starting --- & ECHO(
SET /A Ndx=1000
ECHO( & ECHO Original 6 lines of code, using "^<"
CALL :TESTX File3.TXT File4.TXT _S
ECHO( & ECHO New 1 line code, creating variables, using "^<"
CALL :TESTX File3.TXT File4.TXT _T
ECHO( & ECHO New 1 line code, creating variables, using "^"
CALL :TESTX File3.TXT File4.TXT _U
ECHO( & ECHO New 1 line code, creating variables, using "^|"
CALL :TESTX File3.TXT File4.TXT _V
ECHO ALL TESTS DONE & ECHO(
ECHO( Generated Variables :- & SET A_
PAUSE
GOTO :EOF
:TESTX
echo :*********************************************
SET /A Ndx+=10 & SET A_!Ndx!=MODE = %3. Files :- OUTER(%%1) = %1; INNER(%%2) = %2.
ECHO !A_%Ndx%! & SET /A Ndx+=1
GOTO :%3
:_S
echo :==========="('find /n /v "" ^< %2')"==========
<%1 ( for /f %%i in ('find /n /v "" ^< %2') do (
set "ln=" & set /p "ln=" & echo(!ln!
)
)
GOTO :EOF
:_T
set COMMAND='find /n /v "" ^< %2'&call :new_proc %* & GOTO :EOF
:_U
set COMMAND='findstr /n "^" %2'&call :new_proc %* & GOTO :EOF
:_V
set COMMAND='type %2 ^| find /n /v ""'&call :new_proc %* MODE %1 & GOTO :EOF
:NEW_PROC
echo :=========== (!COMMAND!) --------------
REM
SET /A Ndx+=10 & SET "A_!Ndx!=Mode-%3" & SET /A Ndx+=1
<%1 (
for /f %%i in (!COMMAND!) do (
set "ln=" & set /p "ln=" & echo(!ln!
SET /A Ndx+=1 & SET "A_!Ndx!=!ln!"
)
)
GOTO :EOF
I now have a perfect single line replacement for the "Mode :_S" test
I have 27 other test modes to convert,
but I expect no trouble due to any variant that includes ^<, "^", or ^=
Very many thanks Dave, perfect solution to my needs.
Regards
Alan