Автор Тема: Сохранение файлов в каталоги по условиям из txt  (Прочитано 285 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн reptop1 [?]

  • Новичок
  • *
  • Сообщений: 2
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Прошу помочь, я новичек в работе с программой, поэтому просьба строго не судить.
Имеется два txt файла, один содержит имена файлов(получен батником в корне папки, т.е. содержит список всех файлов в текстовом виде), другой содержит путь к каталогам (с которыми нужно сопоставить и сохранить при нахождении).
Задача такая, чтобы зайти в файл с именами, выдернуть из нее определенную часть, согласно маске, и получившийся результат поискать во втором txt файле. Если он найдет совпадение, то должен создать какой нибудь файл по этому каталогу, если не найдет, то просто закинуть в папку "несортированны".

1й txt файл (песни.txt) имеет имена, к примеру:   Кино - Восьмиклассница
2й txt файл (пути.txt) имеет следующий текст:    Кино;H:\Сортировано\Русские\К\Кино (Цой Виктор)\;

Делаю так:
Код: AutoIt [Выделить]
       
                $sKatalog = FileRead("H:\музыка\песни.txt")      ;открываем файл для чтения
                $song_name = FileReadLine($sKatalog )
        $song_name_split= StringSplit($song_name," - ",1)   ; получаем две переменные "Кино" и "Восьмиклассница"
        $path = "H:\музыка\пути.txt"
        $aLines = StringSplit($path ,";"&@CRLF,1)       ; В файле $path данные хранятся в виде "Кино;H:\Обновления\Сортировано\Русские\К\Кино (Цой Виктор)\;" Разбиваем на переменные "Кино" и "H:\Обновления\Сортировано\Русские\К\Кино (Цой Виктор)\"
        $sNotSorted = "H:\музыка\Несортированные\"
       
        For $x = 1 To $aLines[0] Step +1
            $sSorted = StringRegExpReplace($aLines[$x],$song_name_split[1]&";","")  ;   Ищем "Кино" в файле "Пути.txt", удаляя при этом само название группы и знак ;, чтобы оставить только путь каталога
            If StringInStr($aLines[$x], $sSearched)<>@error  Then           ; Если ошибки нет, то путь прописывается H:\Сортировано\Русские\К\Кино (Цой Виктор)\
                DirCreate ($sSorted)
                $sFinalPath = $sSorted  ;При выполнении условия значение - H:\Сортировано\Русские\К\Кино (Цой Виктор)\
            Else
                DirCreate ($sNotSorted )
                $sFinalPath = $sNotSorted  ; при невыполнении условия значение - H:\музыка\Несортированные\
            EndIf
        Next

        FileCopy($song_name&".mp3",$sFinalPath)  ;файл mp3 лежит в этом же каталоге, копируем его в финальный каталог, в нашем случае H:\Сортировано\Русские\К\Кино (Цой Виктор)\Кино - Восьмиклассница.mp3  



По итогу, при условии что имя исполнителя из первого файла есть в во втором файле, то вроде все работает хорошо, но если исполнителя во втором файле нет, то он все равно пишет в папку Кино (Цой Виктор)
Где я ошибся?
         
« Последнее редактирование: Декабрь 04, 2018, 20:32:33 от reptop1 »

Русское сообщество AutoIt

Сохранение файлов в каталоги по условиям из txt
« Отправлен: Декабрь 04, 2018, 12:43:06 »

Оффлайн ra4o [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 947
  • Репутация: 173
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Похоже, что Вы создали пример не тот, с которым работаете. Этот работать так, ка Вы описали не будет.
Код: AutoIt [Выделить]
        $path = "H:\музыка\пути.txt"
        $aLines = StringSplit($path ,";"&@CRLF,1)       ;Разбиваем на переменные "Кино" и "H:\Обновления\Сортировано\Русские\К\Кино (Цой Виктор)\"
; окуда из пути $path возьмётся "Кино" и "H:\Обновления\Сортировано\Русские\К\Кино (Цой Виктор)\" ?
;....................................................
;Зачем этот цикл ?
For $x = 1 To $aLines[0] Step +1
;..................................................
;Здесь вместо "," поставили ";"
 FileCopy($song_name&".mp3";$sFinalPath)  ;файл mp3 лежит в этом же каталоге, копируем его в финальный каталог, в нашем случае H:\Сортировано\Русские\К\Кино (Цой Виктор)\Кино - Восьмиклассница.mp3  
;Замените на
 FileCopy($song_name&".mp3",$sFinalPath)

 


Это то, что сразу в глаза бросается, а вообще - я бы читал оба файла в массив и работал бы уже с массивами .
« Последнее редактирование: Декабрь 04, 2018, 14:01:42 от ra4o »

Оффлайн reptop1 [?]

  • Новичок
  • *
  • Сообщений: 2

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Может поможете найти правильное решение на основании задачи:
1) Есть папка, в ней много mp3 файлов.
2) Есть батник с помощью которого был получен список этих файлов и записан в этот же каталог с наименование songs.txt (в нем весь список файлов каталога), примерное содержимое файла
(нажмите для показа/скрытия)

3) Есть готовая структура каталогов (так же в txt формате) по многим исполнителям в алфавитном порядке, к нашему примеру относится
Примерное содержимое файла: Файл, допустим называется, path.txt
(нажмите для показа/скрытия)

Задача такая, чтобы скрип просканировал файл с названиями песен (songs.txt), далее по имени исполнителя начал бы искать, есть ли у него готовый каталог в файле path.txt, и если есть, то переместил песню из корневой папки по найденному пути. Если не нашел в path.txt каталог, то скинул файл в папку "Неотсортировано".

Грубо говоря мне на выходе нужно бы получить переменную, допустим,
msgbox (0,'Сообщение',$result)
, которое даст сообщение  либо "H:\Музыка\Русские\К\Кино (Виктор Цой\" при поиске по критерию "Кино",
либо если в каталоге $path его бы не было, то тут уже выдало бы: "H:\Музыка\Неоотсортировано\"
« Последнее редактирование: Декабрь 04, 2018, 20:30:35 от reptop1 »

Русское сообщество AutoIt

Re: Сохранение файлов в каталоги по условиям из txt
« Ответ #2 Отправлен: Декабрь 04, 2018, 20:22:55 »

Оффлайн ra4o [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 947
  • Репутация: 173
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Цитировать
, которое даст сообщение  либо "H:\Музыка\Русские\К\Кино (Виктор Цой\" при поиске по критерию "Кино",
либо если в каталоге $path его бы не было, то тут уже выдало бы: "H:\Музыка\Неоотсортировано\"
Набросал на скорую руку, примерно так можно :
(нажмите для показа/скрытия)

Русское сообщество AutoIt

Re: Сохранение файлов в каталоги по условиям из txt
« Ответ #3 Отправлен: Декабрь 05, 2018, 20:49:25 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
4 Ответов
4010 Просмотров
Последний ответ Апрель 22, 2010, 13:57:50
от AZJIO
5 Ответов
4154 Просмотров
Последний ответ Октябрь 14, 2011, 14:46:10
от Redline
2 Ответов
3010 Просмотров
Последний ответ Декабрь 30, 2012, 03:17:33
от Jan-Jak
20 Ответов
6766 Просмотров
Последний ответ Июнь 15, 2013, 10:51:05
от prokazzza
4 Ответов
1604 Просмотров
Последний ответ Февраль 21, 2014, 17:22:13
от nsgenn
9 Ответов
4520 Просмотров
Последний ответ Апрель 27, 2014, 00:39:13
от KarSar
4 Ответов
1683 Просмотров
Последний ответ Май 06, 2015, 17:45:02
от InnI
0 Ответов
681 Просмотров
Последний ответ Май 06, 2015, 16:52:26
от madmasles
8 Ответов
1788 Просмотров
Последний ответ Май 17, 2016, 20:29:07
от AZJIO
2 Ответов
932 Просмотров
Последний ответ Декабрь 12, 2016, 11:39:18
от mayro