CMD/BAT - Создание папок по расширению файлов

Ответить
Аватара пользователя
jokerbleck

CMD/BAT - Создание папок по расширению файлов

Сообщение jokerbleck »

Здрасте!

Проблемма такая. имеется папка с ОГРОМНЫМ кол-вом файлов разного расширения (семенные фото, видео, документы... всего 65 Гигов)

необходим универсальный BAT/CMD файл для того чтоб в корневом каталоге провести сортировку ВСЕХ файлов, и расфасовать их по расширению и дате создания

НАПРИМЕР:

...Корневая папка/%DATE%/расширение1/*.расширение1

...Корневая папка/%DATE%/расширение2/*.расширение2

...Корневая папка/%DATE%/расширение3/*.расширение3



Зарание благодарю....

ПС, Поиск результата не дал...
Аватара пользователя
megaloman

Re: CMD/BAT - Создание папок по расширению файлов

Сообщение megaloman »

jokerbleck,

Код:

Код: Выделить всё

@Echo Off
rem Даты в системе должны быть формата dd.mm.yyyy, иначе решение надо дорабатывать под конкретный случай
Set In=E:\Delete\Огромное количество
Set Out=E:\Delete\Корневая папка
SetLocal EnableExtensions
SetLocal EnableDelayedExpansion
FOR %%k IN ("%In%\*.*") DO (
	Set tFile=%%~tk
        Set tFile=!tFile:~6,4!_!tFile:~3,2!_!tFile:~0,2!
	Set xFile=%%~xk
	Set xFile=!xFile:~1,255!
        If Not Exist "%Out%\!tFile!\!xFile!" Md "%Out%\!tFile!\!xFile!"
        Move /Y "%%k" "%Out%\!tFile!\!xFile!\"
)
Аватара пользователя
jokerbleck

Re: CMD/BAT - Создание папок по расширению файлов

Сообщение jokerbleck »

Спасибо... однако под корневой папкой я понимал папку в коророй лежит батник, а не корень диска.


Цитата megaloman:



If Not Exist "%Out%\!tFile!\!xFile!" Md "%Out%\!tFile!\!xFile!" Move /Y "%%k" "%Out%\!tFile!\!xFile!\"
CMD/BAT - Создание папок по расширению файлов




тут надо поменять так... если не прав поправте:





@Echo Off



SetLocal EnableExtensions

SetLocal EnableDelayedExpansion



FOR %%k IN ("%In%\*.*") DO (

Set tFile=%%~tk

Set tFile=!tFile:~6,4!_!tFile:~3,2!_!tFile:~0,2!

Set xFile=%%~xk

Set xFile=!xFile:~1,255!

If Not Exist "%cd%\%Out%\!tFile!\!xFile!" Md "%cd%\%Out%\!tFile!\!xFile!"

Move /Y "%%k" "%cd%\%Out%\!tFile!\!xFile!\"

)
Аватара пользователя
jokerbleck

Re: CMD/BAT - Создание папок по расширению файлов

Сообщение jokerbleck »

Хм... не получается...

проблемма в создании папок.
Аватара пользователя
jokerbleck

Re: CMD/BAT - Создание папок по расширению файлов

Сообщение jokerbleck »

Цитата jokerbleck:



однако под корневой папкой я понимал папку в коророй лежит батник, а не корень диска.
CMD/BAT - Создание папок по расширению файлов




Старайтесь при общении использовать общепринятые термины.
Аватара пользователя
El Sanchez

Re: CMD/BAT - Создание папок по расширению файлов

Сообщение El Sanchez »

Цитата jokerbleck:



однако под корневой папкой я понимал папку в коророй лежит батник
CMD/BAT - Создание папок по расширению файлов




Нужно выносить батник за пределы обрабатываемой директории, иначе батник попытается сам себя отсортировать.



Вариант №2:



Код:

Код: Выделить всё

@Echo Off
SetLocal
Set Source=C:\Source
For /F "Tokens=*" %%A In ('Dir /B /S /AD "%Source%" 2^>nul') Do For /F "Tokens=1,3*" %%B In ('Dir /A-D /TC /-C "%%A\*.*" 2^>nul^|Find "."^|Find ":"^|Find /v "\"') Do Call :_Proc "%%A\%%D" "%%B"
For /F "Tokens=1,3*" %%A In ('Dir /A-D /TC /-C "%Source%\*.*" 2^>nul^|Find "."^|Find ":"^|Find /v "\"') Do Call :_Proc "%Source%\%%C" "%%A"
GoTo :EoF
Set Ext=noext%~x1
Set Output=%Source%\%~2\%Ext:*noext.=%
If Not Exist "%Output%" MD "%Output%" 2>nul
If /i Not "%~1"=="%Output%\%~nx1" If Exist "%Output%\%~nx1" (
	For /F "Tokens=1* Delims=:" %%A In ('Dir /B /A-D "%Output%\%~n1(*)%~x1" "%Output%\%~nx1" 2^>nul^|FindStr /in .') Do If Not Exist "%Output%\%~n1(%%A)%~x1" (Echo:Move "%~1" to "%Output%\%~n1(%%A)%~x1"&Move "%~1" "%Output%\%~n1(%%A)%~x1" >nul)
) Else (
	Echo:Move "%~1" to "%Output%\%~nx1"&Move "%~1" "%Output%\%~nx1" >nul
)

P.S. jokerbleck, потренируйтесь сначала на папке с малым количеством файлов и папок, потом натравите на свои 65 гигов.

P.P.S. После сортировки останутся пустые исходные папки, которые можно удалить.
Аватара пользователя
megaloman

Re: CMD/BAT - Создание папок по расширению файлов

Сообщение megaloman »

Цитата:



Спасибо... однако под корневой папкой я понимал папку в коророй лежит батник, а не корень диска.



jokerbleck, так как я телепатиям не обучен Изображение то я Вам предоставил возможноять явным образом указать путь, где надо создавать папки. Если Вы хотите создавать папки там, откуда запускается батник, то вот 2 варианта, как определить исходное данное-переменную Out вместо того, как это было сделано у меня

Код:

Код: Выделить всё

Set Out=.



Код:

Код: Выделить всё

Set Out=%~dp0
Set Out=%Out:~0,-1%

В остальном в коде ничего менять не надо

Если батник, огромное число файлов, папки, в которые расфасовываются файлы, находятся вместе, то вот решение (в нём батник не попытается сам себя отсортировать - он останется на месте)

Код:

Код: Выделить всё

@Echo Off
rem Даты в системе должны быть формата dd.mm.yyyy, иначе решение надо дорабатывать под конкретный случай
SetLocal EnableExtensions
SetLocal EnableDelayedExpansion
Set Bat=%0
FOR %%k IN (*.*) DO (
    If Not "%%k"=="%Bat%" (  
	Set tFile=%%~tk
        Set tFile=!tFile:~6,4!_!tFile:~3,2!_!tFile:~0,2!
	Set xFile=%%~xk
	Set xFile=!xFile:~1,255!
        If Not Exist "!tFile!\!xFile!" Md "!tFile!\!xFile!"
        Move /Y "%%k" "!tFile!\!xFile!\"
    )
)
Аватара пользователя
jokerbleck

Re: CMD/BAT - Создание папок по расширению файлов

Сообщение jokerbleck »

БОЛЬШОЕ Спасибо!

Порывшись на форуме своял несколько CMD/BATников.

Вот собственно что получилось:

1-й, проверяем на наличие ВСКЛ знака в папке если есть меняем на свободное



**************

:1

ren *!*.* %random%.*

goto :1

***************



2-й, изменяем имена всех файлов на "image.*" (фильтр и имя потчеркнул)

************************

@echo off

setlocal enableextensions enabledelayedexpansion



set /a lCount = 0



for /f "delims=*" %%i in ('dir /b /s "*.*"') do (

set /a lCount += 1

ren "%%i" "image!lCount!%%~xi"

)



endlocal

exit /b 0

************************



3-й, копируем в отдельную папку (имена присвоены, совпадений не будет)



*************************

md %cd%\filtr

cls



Set From=%CD%

Set To=%cd%\filtr



FOR /R %From% %%f IN (*.*) DO Move /Y "%%f" "%To%\"

pause



***************************



4-й, поправленный от megaloman (изменил порядок создания папок)

***************************

@Echo Off

rem Даты в системе должны быть формата dd.mm.yyyy, иначе решение надо дорабатывать под конкретный случай



Set Out=%~dp0

Set Out=%Out:~0,-1%



SetLocal EnableExtensions

SetLocal EnableDelayedExpansion



Set Bat=%0



FOR %%k IN (*.*) DO (

If Not "%%k"=="%Bat%" (

Set tFile=%%~tk

Set tFile=!tFile:~6,4!_!tFile:~3,2!_!tFile:~0,2!

Set xFile=%%~xk

Set xFile=!xFile:~1,255!

If Not Exist "!xFile!\!tFile!" Md "!xFile!\!tFile!"

Move /Y "%%k" "!xFile!\!tFile!\"

)

)

***********************************



Вот я имею несколько батников, теперь появился интерес в обьединении их в один.

однако некоторые ватники "зациклины" я не вижу решения... помогите мне /Плиззззззззззз
Аватара пользователя
Iska

Re: CMD/BAT - Создание папок по расширению файлов

Сообщение Iska »

jokerbleck, прочтите, пожалуйста,
справку по тэгам BBCode
и используйте их. В данном случае —
тэг «code»
для оформления кода в предыдущем посте.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»