Author Topic: копирование файлов из множества папок в одну  (Read 2004 times)

0 Members and 1 Guest are viewing this topic.

Oka08

  • Зашел в гости
  • *
  • Posts: 1
    • View Profile
Здравствуйте необходим скрипт который бы искал в каталоге (например C:\Office) папки с определенным названием (например "123" C:\Office\123 ; C:\Office\port\123 ; C:\Office\win\tor
123 и т.д.), в этих папках находил файлы по маске *.pdf и копировал эти файлы или ярлыки к ним, в другую папку (например C:\общак123)

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Вот, посидел, поковырял новый функционал по работе с файлами и файловой системе, все работает отлично  ;)
Code: (clickermann) [Select]
//будет работать только в последней бета версии, в моем случае 4.14.001b

//вводим ужное
$directory="E:\Office\"   //папка, где будем искать
$subdirectory = "123"     //искомая папка
$newdirectory = "E:\all_files"  //папка  для склада файлов





TFCLEAR ("cataloglist.txt") //очищаем файл

//все подкаталоги папки $directory пишем в файл cataloglist.txt
STRWRITELN ("test.bat"," ",1)
STRWRITELN ("test.bat", strconcat("dir /ad /b /s ",$directory," >>cataloglist.txt"),0)   
waitms(50)
execute("test.bat")
waitms(500)


//ищем каталоги с нужными именами

FOR($a=1,$a <= TFCOUNT ("cataloglist.txt") ) //перебор строк
   
   
   IF(STRPOS (TFREAD ("cataloglist.txt",$a), $subdirectory) > 0)//если в строке есть имя подкаталога
     
      $offset = 1
     
      WHILE($offset < STRLEN(TFREAD ("cataloglist.txt",$a)))  //пока в строке не закончатся эти имена
         
         IF(STRPOS(TFREAD ("cataloglist.txt",$a), $subdirectory,$offset) > 0) //смотрим есть ли имя с отсчетом от $offset
           
            $folder = STRCUT2(TFREAD ("cataloglist.txt",$a),1, STRPOS(TFREAD("cataloglist.txt",$a), $subdirectory,$offset) + STRLEN($subdirectory)-1)   //сохраняем этот путь к папке
            //проверяем, чтоб не повторялись
            FOR($i=0,$i<arrsize($all_sub))
               IF($all_sub[$i] = $folder)
                  $i=arrsize($all_sub)
               END_IF
            END_CYC
            //если такого пути нет, то пишем его в массив
            IF($i = arrsize($all_sub))
               arrpush($all_sub, STRCUT2(TFREAD ("cataloglist.txt",$a),1, STRPOS(TFREAD("cataloglist.txt",$a), $subdirectory,$offset) + STRLEN($subdirectory)-1))
            END_IF
           
         END_IF
         
         $offset = $offset + STRPOS (TFREAD ("cataloglist.txt",$a), $subdirectory, $offset) + STRLEN($subdirectory)
         
      END_CYC
   END_IF
   
END_CYC

//смотрим в логе все подкаталоги с нужными именами
//FOR($a=0,$a<arrsize($all_sub))
//   print($all_sub[$a])
//END_CYC

FCREATE ($newdirectory)//создаем общую папку
 
//дальще ищем в этих коталогах файлы по маске *.pdf  и копируем в общую папку

FOR($a=0,$a<arrsize($all_sub))
   
   getfilelist($files, strconcat($all_sub[$a], "\*.pdf")) //в массив имена всех файлов *.pdf в каждой из папок
   
   FOR($i=0,$i<arrsize($files))  // поочереди копируем эти файлы в новый каталог
      print(strconcat($all_sub[$a],"\", $files[$i])) //смотрим в логе наши найденные файлы
      FCOPY (strconcat($all_sub[$a],"\", $files[$i]), strconcat($newdirectory,"\", $files[$i]))
   END_CYC
   
END_CYC


halt