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

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

Patroklos 27-01-2018 12:55 2794051

Скопировать файлы-сателлиты из папки в папку
 
Здравствуйте, помогите пожалуйста решить следующую проблему. Я качаю картинки из интернета при помощи скрипта. Вместе с картинками скачиваются файлы с дополнительной информацией (сателлиты). Выглядит это так:
Код:

E:\IMG\Instaloader\#motionmood       
        2018-01-20_12-53-08_arunaathi_gy.jpg
        2018-01-20_12-53-08_arunaathi_gy.json
        2018-01-20_12-53-08_arunaathi_gy.txt
        2018-01-22_14-10-45_danny_p3d.jpg
        2018-01-22_14-10-45_danny_p3d.json
        2018-01-22_14-10-45_danny_p3d.txt
E:\IMG\Instaloader\#howiseedatworld
        2018-01-22_14-56-19_hereisadam.jpg
        2018-01-22_14-56-19_hereisadam.json
        2018-01-22_14-56-19_hereisadam.txt

Далее я просматриваю изображения и понравившиеся копирую в папку E:\IMG\Good
(только изображение. Без дополнительных файлов. E:\IMG\Good\2018-01-20_12-53-08_arunaathi_gy.jpg)
Хотелось бы написать такой скрипт который обозревал бы папку E:\IMG\Good
И найдя там файл *.жпг искал бы в папках E:\IMG\Instaloader\* файлы сателлиты и копировал бы всё вместе. Допустим в E:\IMG\финал
В идеале в подпапку с тем же именем как и оригинал. То есть:
Код:

E:\IMG\финал\#motionmood\
        2018-01-20_12-53-08_arunaathi_gy.jpg
        2018-01-20_12-53-08_arunaathi_gy.json
        2018-01-20_12-53-08_arunaathi_gy.txt

Как это можно осуществить? А то я даже не знаю с чего начать.
Заранее спасибо.

megaloman 27-01-2018 14:08 2794056

Код:

@Echo Off

Set "GoodFile=Z:\IMG\Good\*.jpg"
Set "AllDirs=Z:\IMG\Instaloader"

FOR /F "usebackq delims=" %%a IN (`Dir "%GoodFile%" /B /A:-D /S 2^>nul`) DO (
        FOR /F "usebackq delims=" %%b IN (`Dir "%AllDirs%\%%~na.*" /B /A:-D /S 2^>nul`) DO (
                XCopy /D /Y "%%b" "%%~dpa" >nul
        )
)

Поправьте пути
Заранее пожалуйста.

Patroklos 29-01-2018 05:00 2794296

Суперкруто! Работает как часы. Спасибо большое.
Скажите пожалуйста, а есть ли способ извлечь из пути
Код:

IMG\Instaloader\#motionmood
только имя папки
Код:

#motionmood
Это бы сделало всё ещё круче.

Patroklos 29-01-2018 09:58 2794311

Картинки лежат в папках отсортированные по тегам. #ёж, #лиса, #сова. Когда скрипт копирует сателлиты он копирует их в общую папку
Код:

Z:\IMG\InstaloaderBest
В результате ежи, лисы, совы лежат вперемешку
А хотелось бы что бы скрипт копировал в папку InstaloaderBest в подпапку с именем подпапки где находились сателлиты.
То есть он нашел сателлит в папке
Код:

Z:\IMG\Instaloader\#ёж
и скопировал в
Код:

Z:\IMG\InstaloaderBest\#ёж
Пока я решил проблему так:
Код:

Set "FinalDir=E:\IMG\#InstaloaderBest"
XCopy /D /Y "%%b" "%FinalDir%%%~pb" >nul

Но это лишние, абсолютно бесполезные папки
Код:

E:\IMG\#InstaloaderBest\IMG\Instaloader\#ёж
Очень желательно так
Код:

E:\IMG\InstaloaderBest\#ёж
Спасибо вам за помощь.

megaloman 29-01-2018 10:36 2794319

Patroklos, ничего не понял!
Цитата:

Цитата Patroklos
Далее я просматриваю изображения и понравившиеся копирую в папку E:\IMG\Good »

Вы копируете понравившиеся изображения кучей в одну папку или по подпапкам #ёж, #лиса, #сова? И что хотите получить? Имхо, если кучей, то я бы предложил алгоритм: просматриваем в корне E:\IMG\Good жпг-файлы, ищем их в подпапках #ёж, #лиса, #сова итд папки E:\IMG\Instaloader, при обнаружении его в подпапке, например, #ёж, перемещаю его из корня E:\IMG\Good в Е:\IMG\Good\#ёж, и туда же дописываю файлы-сателлиты. А вот если не найду, то перемещу жпг-файл в отдельную папку, например E:\IMG\Good\#zzzzzzzzzzz
Такой алгоритм избавит от повторных поисков для уже обработанных файлов, что существенно ускорит выполнение скрипта.
Код:

@Echo Off

Set "GoodDir=Z:\IMG\Good"
Set "MaskFile=*.jpg"

Set "AllDirs=Z:\IMG\Instaloader"
Set "MaskDir=#*.*"
Set "NotFound=#zzzzzzz"

FOR /F "usebackq delims=" %%a IN (`Dir "%GoodDir%\%MaskFile%" /B /A:-D 2^>nul`) DO Call :MoveCopy "%%a"
GoTo :Eof

:MoveCopy
        FOR /F "usebackq delims=" %%d IN (`Dir "%AllDirs%\%MaskDir%" /B /A:D /T:W /O:-D 2^>nul`) DO (
                If Exist "%AllDirs%\%%d\%~1" (
                        Md "%GoodDir%\%%d" 2>nul
                        Move /Y "%GoodDir%\%~1" "%GoodDir%\%%d\" >nul
                        XCopy /D /Y "%AllDirs%\%%d\%~n1.*" "%GoodDir%\%%d\" >nul
                        GoTo :Eof
                )
        )
        Md "%GoodDir%\%NotFound%" 2>nul
        Move /Y "%GoodDir%\%~1" "%GoodDir%\%NotFound%\" >nul
GoTo :Eof

Пути нарисуйте свои
И еще крамольный вопрос: а зачем иметь одни и те же файлы в двух местах? Может быть, их надо не копировать в Good, а перемещать?

Patroklos 29-01-2018 11:45 2794331

Я просматриваю картинки FSViewer. На картинках которые я желаю сохранить я нажимаю хоткей и картинка копируется из папки
Код:

Z:\IMG\Instaloader\#*
в
Код:

Z:\IMG\InstaloaderBest
Цитата:

Цитата megaloman
я бы предложил алгоритм »

Спасибо. Это будет отличное решение.

PS: Пока я писал ответ вы уже дали решение. Спасибо. Сейчас буду пытаться понять что да как.

Идеально! Именно то что надо. Вам надо памятник поставить. Огромное спасибо.

Patroklos 29-01-2018 12:04 2794336

Цитата:

Цитата megaloman
И еще крамольный вопрос: »

Скачивается много мусора. Я оставляю ценное для меня а потом всё ненужное удаляю.


Время: 08:03.

Время: 08:03.
© OSzone.net 2001-