Войти

Показать полную графическую версию : [решено] Как скопировать файлы, указаные в txt файле


MrLOLs
19-09-2010, 14:10
Есть список файлов в txt файле

Например:
...........
hl2\materials\Brick\brickwall003a.vtf
hl2\materials\Brick\brickwall009a.vmt
...........
hl2\materials\Concrete\concretefloor003c.vmt
hl2\materials\Concrete\concretefloor003c.vtf
...........
hl2\materials\Props\combine_display01c.vmt
hl2\materials\Props\combine_display01c.vtf
...........

мне нужно чтобы именно эти файлы, которые в списке, скопировались (или переместились) в отдельную папку с сохранением всех путей (каталогов).

Может можно как-то указать эту группу файлов команде COPY?

Очень на вас надеюсь.

megaloman
19-09-2010, 15:11
@Echo Off

Set To=E:\Delete\NewDir
Set Txt=E:\Delete\txt.txt

FOR /F "usebackq delims=" %%i IN ("%Txt%") DO xCopy "%%i" "%To%\%%i\" /s /y >nul
Батник располагать в той же директории, что и верхняя директория расположения ваших файлов ( в Вашем случае директория hl2 и батник должны быть рядом. Иначе еще надо указать в скрипте путь где находится папка hl2 и при копировании её учесть.
Если в путях и именах имеются русские буквы - текст файла и батника должны быть в 866 (Dos) кодировке.

MrLOLs
19-09-2010, 15:26
Скрипт выполняет основную задачу, но он создает каталог с названием копируемого файла, в котором лежит сам копируемый файл.

Тоесть получилось так:

M:\BAT\NewDir\hl2\materials\Brick\brickwall009a.vmt\brickwall009a.vmt
M:\BAT\NewDir\hl2\materials\Brick\brickfloor001a.vtf\brickfloor001a.vtf
M:\BAT\NewDir\hl2\materials\Brick\brickwall001a.vmt\brickwall001a.vmt

P.S: можно еще указать параметры, чтобы можно было видеть выполнение процесса? И что бы при ошибках (например, если исходный файл не существует) высвечивалось сообщение?

megaloman
19-09-2010, 15:58
Виноват!!! не увидел при тестировании, что создаются директории, воспринял их как файлы. Если написать @Echo Off

Set To=E:\Delete\NewDir
Set Txt=E:\Delete\txt.txt

FOR /F "usebackq delims=" %%i IN ("%Txt%") DO xCopy "%%i" "%To%\%%i" /s /y >nul то директории создаваться не будут, но на каждый файл получим запрос, мне его не удалось подавить, что наверное неприемлемо. Вот более длинный варипнт, но вроде работает@Echo Off

Set To=E:\Delete\NewDir
Set Txt=E:\Delete\txt.txt

FOR /F "usebackq delims=" %%i IN ("%Txt%") DO Call :Coping "%%i" "%To%\%%i"
GoTo :Eof
:Coping
if Not Exist "%~p2\*.*" Md "%~p2" >nul
Copy %1 %2 >nul

MrLOLs
19-09-2010, 16:28
Спасибо огромнейшее!!!! )))

megaloman
19-09-2010, 17:14
Вот Вариант. Если нет исходного файла, скрипт остановится с сообщением
Если запустить этот батник с параметром =1, например kuku.bat 1, полУчите лог-файл процесса. Батник останавливаться не будет - смотрите лог.
@Echo Off

Set To=E:\Delete\NewDir
Set Txt=E:\Delete\txt.txt
Set FLog=E:\Delete\txt.log

Del %FLog% >nul 1>nul 2>nul
If Not '%1'=='' (Set Log=%1) Else (Set Log=0)

FOR /F "usebackq delims=" %%i IN ("%Txt%") DO Call :Coping "%%i" "%To%\%%i"
GoTo :Eof

:Coping
If Not Exist %1 (if %Log%==1 (Echo !!! Нет файла %1 >>%FLog%) Else (Echo !!! Нет файла %1 &&Pause)) && GoTo :Eof
if Not Exist "%~p2*.*" Md "%~p2" >nul && if %Log%==1 If Exist "%~p2*.*" (Echo +++ Создана папка "%~p2" >>%FLog%) Else (Echo !!! Не удалось создать папку "%~p2" >>%FLog)

Copy %1 %2 >nul

if %Log%==1 if Exist %2 (Echo +++ Скопировали %1 -в- %2>>%FLog%) Else (Echo !!! Не удалось скопировать %1>>%FLog%)

MrLOLs
05-07-2011, 23:18
Еще раз спасибо, пригодилось через 10 месяцев :D




© OSzone.net 2001-2012