Вы были чертовски близки к тому, чтобы найти очень хорошее решение.Вам не нужен цикл %% h FOR.И ваше решение не удастся, если путь или имя файла содержит!(маловероятно, но это может произойти)
Я не уверен, что у вас возникнут какие-либо проблемы, если файл находится в корневом каталоге.F: и F: \ обычно имеют очень разные значения.Я не рассматривал эту потенциальную проблему в приведенном ниже решении.
@echo off
FOR /F "delims=" %%i in (filelist.txt) do (
ECHO Copy attempt of this file: %%i
REM -- capture file path and file name
SET "filepath=%%~pi"
SET "filename=%%~nxi"
REM -- enable delayed expansion so we can access variable assigned within loop
SETLOCAL enableExtensions enableDelayedExpansion
REM -- remove trailing backslash
set "filepath=!filepath:~0,-1!"
REM perform shadow copy on file
hobocopy "F:!filepath!" "V:\copy_test!filepath!" "!filename!"
REM -- disable delayed expansion so %%i expansion does not corrupt values containing !
ENDLOCAL
)
Я думаю, что комментарий Joop Egen является правильным.Я считаю, что этот лайнер может работать
@echo off
for /f "delims=" %%i in (filelist.txt) do hobocopy "%%~dp." "V:\copy_test%%~p." "%%~nx"
Это очень простое решение также не должно иметь проблем с корневым каталогом.