Копирование файлов по списку
вручную можно сделать с помощью FAR-менеджера. У него есть "временная панель", которая понимает файлы списков. Только список должен содержать абсолютные пути, которые, в общем-то, несложно из исходного файла переделать.
После этого ENter по такому файлу приведет к открытию всего списка на одной панели и останется только нажать F5.
Хотя не совсем то получится. Если в условии "создать такой же каталог" подразумевает полную структуру поддиректорий, то проще будет сделать полную копию, потом инвертированный поиск и удалить всё найденное
Если не очень, то подойдет программа robocopy
команда будет выглядеть так:
robocopy c:\temp d:\temp file1 file2 file3 /s
c:\temp - исходный каталог
d:\temp - каталог назначения
При копировании необходимо сохранить структуру, посколько есть не нулевая вероятность совпадения имен файлов в разных подкаталогах.
Вариант сделать полную копию, а потом лишнее удалить тоже вполне возможен, но и его хотелось бы избавить от множества ручных операций.
В список файлов можно писать абсолютные пути, это не вызывает каких-либо сложностей.
@echo off
set sourcedir=c:\откуда копируем
set destdir=c:\куда будем\копировать
for /F "eol=; tokens=1* delims=|" %%i in (файл-список.txt) do (
echo F | xcopy "%sourcedir%\%%i" "%destdir%\%%i" /y /q /f
)
Если формат файла со списком действительно можно менять в широких пределах, то наверное можно сразу генерить его с вышеобозначенной строкой с xcopy и запускать как батник.
Кстати, вопрос! Можно ли выложить по фтп на сервер архив и там его распаковать?
Будет ли работать xcopy с файлами, содержащими пробелы в именах?
Andy Tukker писал(а)Я вот этого не совсем понял. Пример выше вроде вроде как раз так и работает - есть батник, есть файл со списком, есть исходный и конечный каталоги.
Может быть, генерить файл со списком и батник со ссылкой на этот список?
Если список тоже нужно копировать, дык, сам себя батник скопировать вполне в состоянии. ...кажется... :)
xcopy, как и прочие, адекватно воспринимает имена с пробелами, если их засунуть в кавычки. Собсно, выше так и сделано.
ЗЫ: Так маленько правильнее:
@echo off
set sourcedir=c:\откуда копируем
set destdir=c:\куда будем\копировать
for /F "tokens=1*" %%i in (файл-список.txt) do (
echo F | xcopy "%sourcedir%\%%i" "%destdir%\%%i" /y /q /f
)
@echo off
set sourcedir=
set destdir=d:\5
for /F "tokens=1*" %%i in (pict.txt) do (
echo F | xcopy "%sourcedir%\%%i" "%destdir%\%%i" /y /q /f
)
положил его в тот же каталог, где лежит pict.txt, запустил. Он про каждый файл обругался, что нет такого файла :-/ Но написал, что "нет файла Alt", т.е. он не воспринимает пробелы в имени каталога. В каком месте поставить кавычки? Или это решается как-то иначе?
xcopy "\D:\Bases\хгнапюфемхъ\LOGO\Alt luce.jpg" "d:\5\D:\Bases\хгнапюфемхъ\LOGO\Alt luce.jpg"
Это вообще достаточно проблематично выполнить. :)
В оригинале, было про "относительный путь внутри каталога", в образце путь абсолютный. Собсно, никто не предусматривал :)
И в догонку... Намудрил я с более правильным вариантом. Первый for как-то лучше работал :-D
Собственно, вот эти батник со списком отработали как (наверное) задумано.
Пути сейчас верну относительные, что-то я действительно увлекся и смешал все советы из этой темы в один :-)
К сожалению, как выяснилось, русские имена файлов/каталог не воспринимаются, но это уже мелочи...