Как скопировать файлы, указаные в txt файле
Есть список файлов в 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?
Очень на вас надеюсь.
|
Код:
@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) кодировке.
|
Скрипт выполняет основную задачу, но он создает каталог с названием копируемого файла, в котором лежит сам копируемый файл.
Тоесть получилось так:
Код:
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: можно еще указать параметры, чтобы можно было видеть выполнение процесса? И что бы при ошибках (например, если исходный файл не существует) высвечивалось сообщение?
|
Виноват!!! не увидел при тестировании, что создаются директории, воспринял их как файлы. Если написать
Код:
@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
|
Спасибо огромнейшее!!!! )))
|
Вот Вариант. Если нет исходного файла, скрипт остановится с сообщением
Если запустить этот батник с параметром =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%)
|
Еще раз спасибо, пригодилось через 10 месяцев :D
|
Время: 02:42.
© OSzone.net 2001-