|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Батник сбора файлов из поддиректорий в общую папку |
|
CMD/BAT - [решено] Батник сбора файлов из поддиректорий в общую папку
|
Новый участник Сообщения: 9 |
Профиль | Отправить 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 |
Ветеран Сообщения: 1758
|
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
|
Профиль | Отправить PM | Цитировать Батник не правильно работает, нужно удалять все файлы, кроме "exclude=.txt .jpg .mp3" и затем оставшиеся файлы перемещать в свою первую директорию.
Сейчас он просто перемещает "не нужные" в свою первую директорию, а "нужные" оставляет на месте. |
Отправлено: 10:12, 18-08-2011 | #12 |
Ветеран Сообщения: 1758
|
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
|
Профиль | Отправить PM | Цитировать Все правильно, но надо чтобы в корнях тоже оставались только исключения.
|
Отправлено: 21:53, 18-08-2011 | #14 |
Ветеран Сообщения: 1758
|
Цитата 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
|
Профиль | Отправить PM | Цитировать В корне файлы переименовываются дописывается "(1)" при повторном запуске батника.
|
Отправлено: 19:47, 19-08-2011 | #16 |
Ветеран Сообщения: 1758
|
Цитата Arsenik77:
@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
|
Профиль | Отправить PM | Цитировать Помогите дописать последний батник так, чтобы если количество файлов (результирующее т.е. после отработки основного батника) в папке меньше 5 то файлы из нее перемещались в другую папку, например папку "различное".
|
Отправлено: 16:14, 05-02-2012 | #18 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|