@ECHO OFF
setlocal enabledelayedexpansion
set /A q=0
for /F "tokens=*" %%E IN (
'findstr /n /r "Finshed With Errors" D:\DataUploadUtil\UploadStatus\TariffUploadLog.txt'
) do (
set array[!q!]=%%E
set /A q=q+1
echo %%E >>D:\DataUploadUtil\UploadStatus\AllTariffsUploadStatus.txt
set test=%%E
echo !test!
)
You need setlocal enabledelayedexpansion to invoke delayedexpansion mode where !var! is the run-time value of var. %var% is always the parse-time value - that is - the value before the loop (or block) is run.
ECHO %%E would also work in this instance (as you've used in appending to all...txt.)
The echo is off report is caused by the fact that test has no value when the for command is parsed so it's executed as echo with no parameter, which generates an error-status report.
If you want to echo a variable that could potentially be empty, exploit a quirk in ECHO by using
ECHO(%potentiallyemptyvar%
Note here that the ( is seen as part of the echo command - it plays no part in nesting of round brackets...