Показать полную графическую версию : Создание папок по расширению файлов
jokerbleck
15-02-2012, 11:44
Здрасте!
Проблемма такая. имеется папка с ОГРОМНЫМ кол-вом файлов разного расширения (семенные фото, видео, документы... всего 65 Гигов)
необходим универсальный BAT/CMD файл для того чтоб в корневом каталоге провести сортировку ВСЕХ файлов, и расфасовать их по расширению и дате создания
НАПРИМЕР:
...Корневая папка/%DATE%/расширение1/*.расширение1
...Корневая папка/%DATE%/расширение2/*.расширение2
...Корневая папка/%DATE%/расширение3/*.расширение3
Зарание благодарю....
ПС, Поиск результата не дал...
megaloman
15-02-2012, 12:46
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
16-02-2012, 03:56
Спасибо... однако под корневой папкой я понимал папку в коророй лежит батник, а не корень диска.
If Not Exist "%Out%\!tFile!\!xFile!" Md "%Out%\!tFile!\!xFile!" Move /Y "%%k" "%Out%\!tFile!\!xFile!\" »
тут надо поменять так... если не прав поправте:
@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
16-02-2012, 05:45
Хм... не получается...
проблемма в создании папок.
однако под корневой папкой я понимал папку в коророй лежит батник, а не корень диска. »
Старайтесь при общении использовать общепринятые термины.
El Sanchez
16-02-2012, 12:44
однако под корневой папкой я понимал папку в коророй лежит батник »
Нужно выносить батник за пределы обрабатываемой директории, иначе батник попытается сам себя отсортировать.
Вариант №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
16-02-2012, 13:06
Спасибо... однако под корневой папкой я понимал папку в коророй лежит батник, а не корень диска.jokerbleck, так как я телепатиям не обучен :lol: то я Вам предоставил возможноять явным образом указать путь, где надо создавать папки. Если Вы хотите создавать папки там, откуда запускается батник, то вот 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
20-02-2012, 05:40
БОЛЬШОЕ Спасибо!
Порывшись на форуме своял несколько 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!\"
)
)
***********************************
Вот я имею несколько батников, теперь появился интерес в обьединении их в один.
однако некоторые ватники "зациклины" я не вижу решения... помогите мне /Плиззззззззззз
jokerbleck, прочтите, пожалуйста, справку по тэгам BBCode (http://forum.oszone.net/misc.php?do=bbcode) и используйте их. В данном случае — тэг «code» (http://forum.oszone.net/misc.php?do=bbcode#code) для оформления кода в предыдущем посте.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.