PDA

Показать полную графическую версию : [решено] батник для копирования файлов из ряда поддиректорий


xumuk032
27-04-2010, 14:37
Проблема следующая. Есть директория с n-ным количеством поддиректорий. Во всех этих поддиректориях нужно найти некоторые файлы и скопировать в единую дирректорию. Имена файлов задаются списком baselist.
Хотелось бы с применением нижеописанной конструкции
for %%a in (%Baselist%) do copy /b "%dir1%%%a*.ans" "%dir2%"

Или проще будет задать список папок, из которых копировать все файлы? Но так не совсем удобно(((

NiOl
27-04-2010, 19:18
Будет вот так (насколько я понял):
- в переменную List - имя файла (и путь к нему при необходимости) со списком копируемых файлов
- в переменную Dst - каталог, куда копировать файлы (на конце знак "\").
- копируется из текущего каталога (откуда произведен запуск) с подкаталогами.

@echo off
SetLocal EnableExtensions

Set List=baselist.txt
Set Dst=C:\TEMP\

if not exist %List% (
echo List-file not found!
exit 1
)
Set log="%~dpn0.log"
Set tmp="%~dpn0.tmp"
Set wrk="%~dpn0.lst"

echo ======= %date% %time:~0,8% =======>>%log%
del /f %wrk% 2>nul
dir /a /b /on /s>%tmp%
for /f "usebackq tokens=* delims=" %%F in ("%List%") do findstr /c:"%%F" %tmp%>>%wrk%
for /f "usebackq tokens=* delims=" %%F in (%wrk%) do (
copy /b /y "%%F" "%Dst%" >nul 2>nul
if errorlevel 1 (echo Can`t copy %%F to "%Dst%">>%log%) else (echo File %%F copied>>%log%)
)

del /f %tmp%
del /f %wrk%

ЗЫ: Одноименные файлы при копировании перезатираются новыми и в логе это не отражается (такая проверка потребует некоторого усложнения алгоритма).

megaloman
27-04-2010, 19:37
А так вот нельзя?
Set Baselist="kuku.txt","kuku1.txt"
Set Otkuda="H:\Delete"
Set Kuda="H:\Delete1\"

for /R %Otkuda% %%i in (%Baselist%) do copy "%%~fi" %Kuda%


Здесь переменной Otkuda присвоено имя директории в которой могут быть поддиректории разной вложенности, из которых берутся файлы, помянутые в списке. За просмотр поддиректорий отвечает ключ /R.
%%~fi расширяет имя файла в переменной %%i до полного имени (с путём).
Кавычки надо на случай того, что в имени файла или пути могут встретиться пробелы

xumuk032
27-04-2010, 21:23
Спасибо, megaloman, идею подхватил, под себя доработал. Вариант отличный!




© OSzone.net 2001-2012