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

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

Ответить
Настройки темы
CMD/BAT - [решено] Батник сбора файлов из поддиректорий в общую папку

Аватара для rBBWYwg

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


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

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


Уважаемые, прошу помощи по такому вопросу:

Имеем многоуровневую развитую структуру директорий "Главная-подчиненные". Например,

GENERALFOLDER
|_FOLDER-1
|_FOLDER-11
|_FOLDER-111
|_FOLDER-1111
|_FOLDER-1112
...
|_FOLDER-112
...
|_FOLDER-2
...

и т.д.
Количество подчиненных директорий не фиксировано.
Есть ли способ написать батник, который бы перемещал все файлы поддиректорий в их корневую папку? То есть, все файлы из любых поддиректорий папки FOLDER-1 перемещались бы в FOLDER-1, все файлы поддиректорий из FOLDER-2 перемещались бы в FOLDER-2, так же с FOLDER-3 и т.д.
При этом, необходимо избежать переписывания файлов при совпадений их имен, а оригинальными именами файлов можно жертвовать, но не расширениями.

Отправлено: 17:01, 23-02-2009

 

Ветеран


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

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


Arsenik77,
Код: Выделить весь код
@echo off
setlocal

set "exclude=.txt .jpg .mp3"

for /d %%i in ("generalfolder\*") do (

    pushd "%%i"
    for /d %%j in (*) do (
    
        for /f "tokens=*" %%k in (' "2>nul dir /b /s /a-d "%%j"" ') do call:move "%%k"

    )
    popd
    
)
goto:eof

:move
for %%i in (%exclude%) do if /i "%%i"=="%~x1" goto:eof
set "file=%~nx1"

:check
set /a cnt+=1
if exist "%file%" set "file=%~n1(%cnt%)%~x1" && goto:check

move %1 "%file%"
set "cnt="
set "file="

Отправлено: 23:46, 17-08-2011 | #11



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

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


Пользователь


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

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


Батник не правильно работает, нужно удалять все файлы, кроме "exclude=.txt .jpg .mp3" и затем оставшиеся файлы перемещать в свою первую директорию.
Сейчас он просто перемещает "не нужные" в свою первую директорию, а "нужные" оставляет на месте.

Отправлено: 10:12, 18-08-2011 | #12


Ветеран


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

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


Arsenik77,
Т.е. те, что исключение перемещать в корень, а остальные удалять?
Код: Выделить весь код
@echo off
setlocal

set "exclude=.txt .jpg .mp3"

for /d %%i in ("generalfolder\*") do (

    pushd "%%i"
    for /d %%j in (*) do (
    
        for /f "tokens=*" %%k in (' "2>nul dir /b /s /a-d "%%j"" ') do call:move "%%k"

    )
    popd
    
)
goto:eof

:move
for %%i in (cnt file check) do set "%%i="

for %%i in (%exclude%) do if /i "%%i"=="%~x1" set check=1
if not defined check del /a /q /f %1 && goto:eof

set "file=%~nx1"

:check
set /a cnt+=1
if exist "%file%" set "file=%~n1(%cnt%)%~x1" && goto:check

move %1 "%file%"

Отправлено: 10:55, 18-08-2011 | #13


Пользователь


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

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


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

Отправлено: 21:53, 18-08-2011 | #14


Ветеран


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

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


Цитата Arsenik77:
но надо чтобы в корнях тоже оставались только исключения. »
Код: Выделить весь код
@echo off
setlocal

set "exclude=.txt .jpg .mp3"

for /d %%i in ("generalfolder\*") do (

    pushd "%%i"
    for /f "tokens=*" %%j in ('dir /b /s /a-d') do call:move "%%j"
    popd
    
)
goto:eof

:move
for %%i in (cnt file check) do set "%%i="

for %%i in (%exclude%) do if /i "%%i"=="%~x1" set check=1
if not defined check del /a /q /f %1 && goto:eof

set "file=%~nx1"

:check
set /a cnt+=1
if exist "%file%" set "file=%~n1(%cnt%)%~x1" && goto:check

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

Отправлено: 22:16, 18-08-2011 | #15


Пользователь


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

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


В корне файлы переименовываются дописывается "(1)" при повторном запуске батника.
читать дальше »
Для меня это существенно, считаю задачу решенной.
Спасибо!

Отправлено: 19:47, 19-08-2011 | #16


Ветеран


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

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


Цитата Arsenik77:
В корне файлы переименовываются дописывается "(1)" при повторном запуске батника. »
Код: Выделить весь код
@echo off
setlocal

set "exclude=.jpg .mp3 .txt"

for /d %%i in ("generalfolder\*") do (

    pushd "%%i"
    for /f "tokens=*" %%j in ('dir /b /s /a-d') do call:move "%%j"
    popd
    
)
goto:eof

:move
for %%i in (cnt file check) do set "%%i="

for %%i in (%exclude%) do if /i "%%i"=="%~x1" set check=1
if not defined check del /a /q /f %1 && goto:eof
if "%~dp1"=="%cd%\" goto:eof

set "file=%~nx1"

:check
set /a cnt+=1
if exist "%file%" set "file=%~n1(%cnt%)%~x1" && goto:check

1>nul move %1 "%file%"
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:16, 19-08-2011 | #17


Пользователь


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

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


Помогите дописать последний батник так, чтобы если количество файлов (результирующее т.е. после отработки основного батника) в папке меньше 5 то файлы из нее перемещались в другую папку, например папку "различное".

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



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Записать имя папки в которой лежит батник в переменную а потом эту же папку переим. bobr95 Скриптовые языки администрирования Windows 8 10-04-2012 18:42
Доступ - сетевое обнаружение и вход в общую папку фрай_луис Microsoft Windows Vista 4 27-12-2009 19:54
CMD/BAT - [решено] Как получить права на папку\файл в Windows Seven через батник? Pozia Скриптовые языки администрирования Windows 7 08-12-2009 21:47
V. 5.5/2000/2003 - Переместить содержимое почтового ящика в общую папку migunov Microsoft Exchange Server 2 25-02-2009 19:02
Копирование исходящей почты в Общую папку Loki3D Microsoft Exchange Server 0 01-10-2007 18:11




 
Переход