Você deve adicionar o "TOKENS=*"
ao loop FOR /F
que lê da lista de arquivos para garantir que as linhas lidas na lista de arquivos que possuem espaços entre caracteres literais não sejam interpretadas como um delimitador ou uma nova linha, eliminando assim a cadeia de caracteres iterada no espaço e não obtendo toda a linha de caracteres necessária para percorrer os espaços antes do retorno de linha ou dos feeds de linha.
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
cls
set dest=F:\ERRORS\recovered
for /f "TOKENS=*" %%f in (F:\ERRORS\errorlist.txt) do (
set i=1
for /f "tokens=*" %%F IN ('dir /S /B /A:-D "%%~f"') Do (
for %%N in ("%%F") Do (
set name=%%~NN
set ext=%%~XN
)
copy "%%~F" "%dest%\!name!_!i!!ext!"
set /A i=!i!+1
)
)
ENDLOCAL
Mais recursos
-
FOR /?
tokens=x,y,m-n - specifies which tokens from each line are to be passed to the for body for each iteration. This will cause additional variable names to be allocated. The m-n form is a range, specifying the mth through the nth tokens. If the last character in the tokens= string is an asterisk, then an additional variable is allocated and receives the remaining text on the line after the last token parsed.