Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Создание папок по расширению файлов

Ответить
Настройки темы
CMD/BAT - Создание папок по расширению файлов

Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Отправить PM | Цитировать


Здрасте!
Проблемма такая. имеется папка с ОГРОМНЫМ кол-вом файлов разного расширения (семенные фото, видео, документы... всего 65 Гигов)
необходим универсальный BAT/CMD файл для того чтоб в корневом каталоге провести сортировку ВСЕХ файлов, и расфасовать их по расширению и дате создания
НАПРИМЕР:
...Корневая папка/%DATE%/расширение1/*.расширение1
...Корневая папка/%DATE%/расширение2/*.расширение2
...Корневая папка/%DATE%/расширение3/*.расширение3

Зарание благодарю....
ПС, Поиск результата не дал...

Отправлено: 11:44, 15-02-2012

 

Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


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!\"
)

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:46, 15-02-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо... однако под корневой папкой я понимал папку в коророй лежит батник, а не корень диска.
Цитата megaloman:
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!\"
)

Отправлено: 03:56, 16-02-2012 | #3


Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Отправить PM | Цитировать


Хм... не получается...
проблемма в создании папок.

Отправлено: 05:45, 16-02-2012 | #4


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата jokerbleck:
однако под корневой папкой я понимал папку в коророй лежит батник, а не корень диска. »
Старайтесь при общении использовать общепринятые термины.
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:17, 16-02-2012 | #5


Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1273
Благодарности: 1030

Профиль | Отправить PM | Цитировать


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

Вариант №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. После сортировки останутся пустые исходные папки, которые можно удалить.
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:44, 16-02-2012 | #6


Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


Цитата:
Спасибо... однако под корневой папкой я понимал папку в коророй лежит батник, а не корень диска.
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!\"
    )
)

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 16-02-2012 в 15:31.

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:06, 16-02-2012 | #7


Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Отправить PM | Цитировать


БОЛЬШОЕ Спасибо!
Порывшись на форуме своял несколько 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!\"
)
)
***********************************

Вот я имею несколько батников, теперь появился интерес в обьединении их в один.
однако некоторые ватники "зациклины" я не вижу решения... помогите мне /Плиззззззззззз

Отправлено: 05:40, 20-02-2012 | #8


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


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

Отправлено: 07:16, 20-02-2012 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Создание папок по расширению файлов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Создание папок по дате получения файлов и перемещение в них файлов KamikadZZe Скриптовые языки администрирования Windows 1 01-09-2011 14:15
Запрет записи файлов на сетевые ресурсы по расширению Arkan190 Microsoft Windows NT/2000/2003 6 20-06-2011 10:58
VBS/WSH/JS - Отбор файлов по расширению, последующее их удаление. SaintVictor Скриптовые языки администрирования Windows 3 22-05-2010 13:21
Доступ - Простой запрет копирования файлов по расширению Dimly Microsoft Windows 2000/XP 2 17-08-2009 09:09
Разное - Всегда скрывать определенный тип файлов по расширению garkin123 Microsoft Windows Vista 3 23-05-2009 01:49




 
Переход