Войти

Показать полную графическую версию : [решено] Скрипт который раскидывает файлы по папкам, с частью имени этих файлов


username-qq
06-10-2018, 14:26
Скрипт, который раскинул бы все файлы в папки, названия которых будут равняться слову, до первого упоминания символа _ (либо лучше до первого упоминания года "201*").
Если такая папка имеется, то просто перенести в нее файл, если нет, то создать папку и перенести в нее файл.
Как это реализовать? Предпочтительно на CMD/BAT Или PowerShell
(OC Windows 10)

Для понимания:

cd До
S:\Test\До>dir /b /s
S:\Test\До\File5
S:\Test\До\File1_2018-08-02-19-12-21-123_https-site.site-file1_com.jpeg
S:\Test\До\File1_2018-08-03-19-12-21-123_https-site.site-file1_com.jpeg
S:\Test\До\File1_2018-08-04-18-12-21-123_https-site.site-file1_com.jpeg
S:\Test\До\File1_2018-08-04-19-12-21-123_https-site.site-file1_com.jpeg
S:\Test\До\File1_2018-08-05-19-12-21-123_https-site.site-file1_com.jpeg
S:\Test\До\File2_2018-08-04-19-12-21-123_https-site.site-file2_com.jpeg
S:\Test\До\File2_2018-08-06-19-12-21-123_https-site.site-file2_com.jpeg
S:\Test\До\File2_2018-08-07-19-12-21-123_https-site.site-file2_com.jpeg
S:\Test\До\File2_2018-08-08-19-12-21-123_https-site.site-file2_com.jpeg
S:\Test\До\File2_2018-08-09-19-12-21-123_https-site.site-file2_com.jpeg
S:\Test\До\File3_2018-08-02-19-12-21-123_https-site.site-file3_com.jpeg
S:\Test\До\File3_2018-08-08-19-12-21-123_https-site.site-file3_com.jpeg
S:\Test\До\File3_2018-08-10-19-12-21-123_https-site.site-file3_com.jpeg
S:\Test\До\File4_2018-08-03-19-12-21-123_https-site.site-file4_com.jpeg
S:\Test\До\File4_2018-08-04-19-12-21-123_https-site.site-file4_com.jpeg
S:\Test\До\File5_2018-08-04-18-12-21-123_https-site.site-file4_com.jpeg
S:\Test\До\File5_2018-08-04-19-12-21-123_https-site.site-file4_com.jpeg

cd После
S:\Test\После>dir /b /s
S:\Test\После\File5
S:\Test\После\File1
S:\Test\После\File2
S:\Test\После\File3
S:\Test\После\File4
S:\Test\После\File5\File5_2018-08-04-18-12-21-123_https-site.site-file4_com.jpeg
S:\Test\После\File5\File5_2018-08-04-19-12-21-123_https-site.site-file4_com.jpeg
S:\Test\После\File1\File1_2018-08-02-19-12-21-123_https-site.site-file1_com.jpeg
S:\Test\После\File1\File1_2018-08-03-19-12-21-123_https-site.site-file1_com.jpeg
S:\Test\После\File1\File1_2018-08-04-18-12-21-123_https-site.site-file1_com.jpeg
S:\Test\После\File1\File1_2018-08-04-19-12-21-123_https-site.site-file1_com.jpeg
S:\Test\После\File1\File1_2018-08-05-19-12-21-123_https-site.site-file1_com.jpeg
S:\Test\После\File2\File2_2018-08-04-19-12-21-123_https-site.site-file2_com.jpeg
S:\Test\После\File2\File2_2018-08-06-19-12-21-123_https-site.site-file2_com.jpeg
S:\Test\После\File2\File2_2018-08-07-19-12-21-123_https-site.site-file2_com.jpeg
S:\Test\После\File2\File2_2018-08-08-19-12-21-123_https-site.site-file2_com.jpeg
S:\Test\После\File2\File2_2018-08-09-19-12-21-123_https-site.site-file2_com.jpeg
S:\Test\После\File3\File3_2018-08-02-19-12-21-123_https-site.site-file3_com.jpeg
S:\Test\После\File3\File3_2018-08-08-19-12-21-123_https-site.site-file3_com.jpeg
S:\Test\После\File3\File3_2018-08-10-19-12-21-123_https-site.site-file3_com.jpeg
S:\Test\После\File4\File4_2018-08-03-19-12-21-123_https-site.site-file4_com.jpeg
S:\Test\После\File4\File4_2018-08-04-19-12-21-123_https-site.site-file4_com.jpeg

Для понимания более подробно:

dir /s До
Содержимое папки S:\Test\До

Сб 06.10.2018 13:54 <DIR> .
Сб 06.10.2018 13:54 <DIR> ..
Сб 06.10.2018 13:49 <DIR> File5
Сб 06.10.2018 13:49 0 File1_2018-08-02-19-12-21-123_https-site.site-file1_com.jpeg
Сб 06.10.2018 13:49 0 File1_2018-08-03-19-12-21-123_https-site.site-file1_com.jpeg
Сб 06.10.2018 13:51 0 File1_2018-08-04-18-12-21-123_https-site.site-file1_com.jpeg
Сб 06.10.2018 13:49 0 File1_2018-08-04-19-12-21-123_https-site.site-file1_com.jpeg
Сб 06.10.2018 13:49 0 File1_2018-08-05-19-12-21-123_https-site.site-file1_com.jpeg
Сб 06.10.2018 13:52 0 File2_2018-08-04-19-12-21-123_https-site.site-file2_com.jpeg
Сб 06.10.2018 13:50 0 File2_2018-08-06-19-12-21-123_https-site.site-file2_com.jpeg
Сб 06.10.2018 13:50 0 File2_2018-08-07-19-12-21-123_https-site.site-file2_com.jpeg
Сб 06.10.2018 13:50 0 File2_2018-08-08-19-12-21-123_https-site.site-file2_com.jpeg
Сб 06.10.2018 13:50 0 File2_2018-08-09-19-12-21-123_https-site.site-file2_com.jpeg
Сб 06.10.2018 13:51 0 File3_2018-08-02-19-12-21-123_https-site.site-file3_com.jpeg
Сб 06.10.2018 13:51 0 File3_2018-08-08-19-12-21-123_https-site.site-file3_com.jpeg
Сб 06.10.2018 13:50 0 File3_2018-08-10-19-12-21-123_https-site.site-file3_com.jpeg
Сб 06.10.2018 13:51 0 File4_2018-08-03-19-12-21-123_https-site.site-file4_com.jpeg
Сб 06.10.2018 13:51 0 File4_2018-08-04-19-12-21-123_https-site.site-file4_com.jpeg
Сб 06.10.2018 13:51 0 File5_2018-08-04-18-12-21-123_https-site.site-file4_com.jpeg
Сб 06.10.2018 13:51 0 File5_2018-08-04-19-12-21-123_https-site.site-file4_com.jpeg
17 файлов 0 байт

Содержимое папки S:\Test\До\File5

Сб 06.10.2018 13:49 <DIR> .
Сб 06.10.2018 13:49 <DIR> ..
0 файлов 0 байт

dir /s После
Содержимое папки S:\Test\После

Сб 06.10.2018 13:55 <DIR> .
Сб 06.10.2018 13:55 <DIR> ..
Сб 06.10.2018 13:49 <DIR> File5
Сб 06.10.2018 13:49 <DIR> File1
Сб 06.10.2018 13:49 <DIR> File2
Сб 06.10.2018 13:49 <DIR> File3
Сб 06.10.2018 13:49 <DIR> File4
0 файлов 0 байт

Содержимое папки S:\Test\После\File5

Сб 06.10.2018 13:49 <DIR> .
Сб 06.10.2018 13:49 <DIR> ..
Сб 06.10.2018 13:51 0 File5_2018-08-04-18-12-21-123_https-site.site-file4_com.jpeg
Сб 06.10.2018 13:51 0 File5_2018-08-04-19-12-21-123_https-site.site-file4_com.jpeg
2 файлов 0 байт

Содержимое папки S:\Test\После\File1

Сб 06.10.2018 13:49 <DIR> .
Сб 06.10.2018 13:49 <DIR> ..
Сб 06.10.2018 13:49 0 File1_2018-08-02-19-12-21-123_https-site.site-file1_com.jpeg
Сб 06.10.2018 13:49 0 File1_2018-08-03-19-12-21-123_https-site.site-file1_com.jpeg
Сб 06.10.2018 13:51 0 File1_2018-08-04-18-12-21-123_https-site.site-file1_com.jpeg
Сб 06.10.2018 13:49 0 File1_2018-08-04-19-12-21-123_https-site.site-file1_com.jpeg
Сб 06.10.2018 13:49 0 File1_2018-08-05-19-12-21-123_https-site.site-file1_com.jpeg
5 файлов 0 байт

Содержимое папки S:\Test\После\File2

Сб 06.10.2018 13:49 <DIR> .
Сб 06.10.2018 13:49 <DIR> ..
Сб 06.10.2018 13:52 0 File2_2018-08-04-19-12-21-123_https-site.site-file2_com.jpeg
Сб 06.10.2018 13:50 0 File2_2018-08-06-19-12-21-123_https-site.site-file2_com.jpeg
Сб 06.10.2018 13:50 0 File2_2018-08-07-19-12-21-123_https-site.site-file2_com.jpeg
Сб 06.10.2018 13:50 0 File2_2018-08-08-19-12-21-123_https-site.site-file2_com.jpeg
Сб 06.10.2018 13:50 0 File2_2018-08-09-19-12-21-123_https-site.site-file2_com.jpeg
5 файлов 0 байт

Содержимое папки S:\Test\После\File3

Сб 06.10.2018 13:49 <DIR> .
Сб 06.10.2018 13:49 <DIR> ..
Сб 06.10.2018 13:51 0 File3_2018-08-02-19-12-21-123_https-site.site-file3_com.jpeg
Сб 06.10.2018 13:51 0 File3_2018-08-08-19-12-21-123_https-site.site-file3_com.jpeg
Сб 06.10.2018 13:50 0 File3_2018-08-10-19-12-21-123_https-site.site-file3_com.jpeg
3 файлов 0 байт

Содержимое папки S:\Test\После\File4

Сб 06.10.2018 13:49 <DIR> .
Сб 06.10.2018 13:49 <DIR> ..
Сб 06.10.2018 13:51 0 File4_2018-08-03-19-12-21-123_https-site.site-file4_com.jpeg
Сб 06.10.2018 13:51 0 File4_2018-08-04-19-12-21-123_https-site.site-file4_com.jpeg
2 файлов 0 байт

UDP: Файлы названы по шаблону "ИМЯ_ГОД-МЕСЯЦ-ДЕНЬ-ЧАСЫ-МИНУТЫ-СЕКУНДЫ-ДОЛИСИКУНД_САЙТ_ПРЯМАЯССЫЛКА.jpeg"

То есть ИМЯ бывает каким угодно, не только File№...

Спасибо!

Busla
06-10-2018, 14:52
Как это реализовать? »
так а с чем у вас затруднения?
FOR /? напомнит, как разбить вывод DIR на части

или воспользуйтесь FORFILES

username-qq
06-10-2018, 15:56
Я не умею писать скрипты такой сложности

megaloman
06-10-2018, 16:48
@Echo Off
Call :@Files "Z:\Test\До" "Z:\Test\После" "jpeg" "_201"
GoTo :Eof

:@Files
FOR /F "usebackq delims=" %%f IN (`2^>nul Dir /B /A:-D /S "%~1\*%~4*.%~3"`) DO (
If Exist "%%f" Call :@Moveing "%%f" %2 %3 %4
)
GoTo :Eof

:@Moveing
Set "Fold=%~n1"
Call Set "Fold=%%Fold:%~4=:%%"
FOR /F "delims=:" %%n IN ("%Fold%") DO Set "Fold=%%n"
If Not Exist "%~2\%Fold%" Md "%~2\%Fold%"
>nul Move /Y "%~dp1%Fold%%~4*.%~3" "%~2\%Fold%\"
GoTo :Eof

username-qq
06-10-2018, 17:33
@Echo Off Call :@Files "Z:\Test\До" "Z:\Test\После" "jpeg" "_201" GoTo :Eof :@Files FOR /F "usebackq delims=" %%f IN (`2^>nul Dir /B /A:-D /S "%~1\*%~4*.%~3"`) DO ( If Exist "%%f" Call :@Moveing "%%f" %2 %3 %4 ) GoTo :Eof :@Moveing Set "Fold=%~n1" Call Set "Fold=%%Fold:%~4=:%%" FOR /F "delims=:" %%n IN ("%Fold%") DO Set "Fold=%%n" If Not Exist "%~2\%Fold%" Md "%~2\%Fold%" >nul Move /Y "%~dp1%Fold%%~4*.%~3" "%~2\%Fold%\" GoTo :Eof »
Спасибо за помощь, но у меня почему-то не сработало.

Дополню: Файлы создаются по шаблону "ИМЯ_ГОД-МЕСЯЦ-ДЕНЬ-ЧАСЫ-МИНУТЫ-СЕКУНДЫ-ДОЛИСИКУНД_САЙТ_ПРЯМАЯССЫЛКА.jpeg"

Тоесть ИМЯ может меняться как угодно, не только File№... (добавлю в шапку)

megaloman
06-10-2018, 17:42
username-qq, Вы свои пути к файлам прописали? В этих путях есть русские символы? Если есть - сохраните батник в 866 кодировке. Не сработало - это как? Сообщения об ошибках? Переименуйте Ваш батник, который не сработал, в txt-файл и приложите к сообщению.
Скрипту фиолетово, какое имя стоИт перед заданной подстрокой (здесь, по Вашему пожеланию, _201)
В принципе, при вызове функции :@Files можно прописать иную подстроку для опознавания имени, расширение, пути к папкам.

username-qq
06-10-2018, 18:30
сохраните батник в 866 кодировке »

Помогло сохранение в 866 кодировке.


ОГРОМНОЕ СПАСИБО!




© OSzone.net 2001-2012