Компьютерный форум 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=326477)

registeruser1 03-05-2017 19:14 2733843

Поиск и сортировка файлов по части названия
 
Друзья, доброго времени суток.
Ситуация следующая - есть папка, в ней еще куча папок с файлами.
Файлы помечены в конце названия плюсами через пробел, например:

имя_файла +.txt
имя_файла + +.txt
имя_файла + + +.txt


Таких файлов по вложенным разным папкам больше нескольких тысяч.
Нужно отсортировать все эти файлы по трем разным папкам - с одним, двумя и тремя плюсами.
Помогите пожалуйста с данной ситуацией...
Заранее благодарю...

megaloman 03-05-2017 23:06 2733903

С сохранением структуры папок
Код:

@Echo Off

Set "BoxIn=Z:\Box_In"

Set "File1=* +.txt"
Set "File2=* + +.txt"
Set "File3=* + + +.txt"

Set "BoxOut1=Z:\Box_Out\+"
Set "BoxOut2=Z:\Box_Out\+ +"
Set "BoxOut3=Z:\Box_Out\+ + +"

FOR /F "usebackq delims=" %%f IN (`Dir "%BoxIn%\%File3%" /B /A-D /S 2^>nul`) DO Call :PlusMove "%%f" "%BoxOut3%"
FOR /F "usebackq delims=" %%f IN (`Dir "%BoxIn%\%File2%" /B /A-D /S 2^>nul`) DO Call :PlusMove "%%f" "%BoxOut2%"
FOR /F "usebackq delims=" %%f IN (`Dir "%BoxIn%\%File1%" /B /A-D /S 2^>nul`) DO Call :PlusMove "%%f" "%BoxOut1%"

GoTo :Eof

:PlusMove
        Set "In=%~dp1"
        Set "Out=%~2"

        Call Set "Out=%%In:%BoxIn%=%Out%%%
       
        If Not Exist "%Out%" Md "%Out%"
        Move %1 "%Out%" >nul
GoTo :Eof

Без сохранения структуры папок (внимание! при совпадении имён в разных папках останется один файл с этим именем)
Код:

@Echo Off

Set "BoxIn=Z:\Box_In"

Set "File1=* +.txt"
Set "File2=* + +.txt"
Set "File3=* + + +.txt"

Set "BoxOut1=Z:\Box_Out\+"
Set "BoxOut2=Z:\Box_Out\+ +"
Set "BoxOut3=Z:\Box_Out\+ + +"

FOR /F "usebackq delims=" %%f IN (`Dir "%BoxIn%\%File3%" /B /A-D /S 2^>nul`) DO Call :PlusMove "%%f" "%BoxOut3%"
FOR /F "usebackq delims=" %%f IN (`Dir "%BoxIn%\%File2%" /B /A-D /S 2^>nul`) DO Call :PlusMove "%%f" "%BoxOut2%"
FOR /F "usebackq delims=" %%f IN (`Dir "%BoxIn%\%File1%" /B /A-D /S 2^>nul`) DO Call :PlusMove "%%f" "%BoxOut1%"

GoTo :Eof

:PlusMove
        If Not Exist %2 Md %2
        Move /Y %1 "%~2\" >nul
GoTo :Eof


Iska 04-05-2017 00:15 2733922

Цитата:

Цитата megaloman
(внимание! при совпадении имён в разных папках останется один файл с этим именем) »

@#$%! Почему, ну, почему никогда не обращают на это внимание при озвучивании своих ТЗ?!

registeruser1 04-05-2017 05:38 2733949

megaloman, спасибо, но не хочет работать. Просто запускается и все закрывается.
Если это поможет, у меня стоить ХР-x64 SP2.

Iska 04-05-2017 09:21 2733988

registeruser1, не поможет. Чтобы помогло, Вы должны полностью и подробно описать свои действия: какой именно код брали — первый или второй, правили ли код по своим потребностям (например, меняли имена папок), в какой кодировке сохраняли пакетный файл, как исполняли пакетный файл и т.д.


Время: 13:49.

Время: 13:49.
© OSzone.net 2001-