Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Как скопировать файлы, указаные в txt файле (http://forum.oszone.net/showthread.php?t=185875)

MrLOLs 19-09-2010 14:10 1499047

Как скопировать файлы, указаные в 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?

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

megaloman 19-09-2010 15:11 1499100

Код:

@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 1499109

Скрипт выполняет основную задачу, но он создает каталог с названием копируемого файла, в котором лежит сам копируемый файл.

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

Код:

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 1499125

Виноват!!! не увидел при тестировании, что создаются директории, воспринял их как файлы. Если написать
Код:

@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 1499149

Спасибо огромнейшее!!!! )))

megaloman 19-09-2010 17:14 1499174

Вот Вариант. Если нет исходного файла, скрипт остановится с сообщением
Если запустить этот батник с параметром =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 1707854

Еще раз спасибо, пригодилось через 10 месяцев :D


Время: 02:42.

Время: 02:42.
© OSzone.net 2001-