|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Сортировка файлов в каталоге с подкаталогами |
|
CMD/BAT - Сортировка файлов в каталоге с подкаталогами
|
Новый участник Сообщения: 11 |
Профиль | Отправить PM | Цитировать
Прошу помощи! У меня есть каталог ( папка ) с подкаталогами ( папками ). В каталоге есть файлы скажем .txt .doc .pdf
Мне нужно отсортировать их по расширению и распределить в отдельном каталоге с подкаталогами названия которых соответствуют расширению. Cортировку выполнить копированием. При этом чтобы после сортировки в файле .txt указывалась дата\время последних изменений В том что я написал происходит следующее - файлы сортируются только из основного каталога, а из подкаталогов не затрагиваются, и каждый раз перезаписывает файл с временем\датой последних изменений. @echo off setlocal enabledelayedexpansion xcopy *.txt sort\txt DIR > sort\txt.txt xcopy *.doc sort\doc DIR > sort\doc.txt pause |
|
Отправлено: 19:37, 26-10-2018 |
Новый участник Сообщения: 24
|
Профиль | Отправить PM | Цитировать megaloman, Для чего к имени выходного каталога добавлять расширение? Нет же такого требования в условии ))
И, кстати, через exist можно проверить наличие каталога просто указав в конце слэш "\" |
Отправлено: 13:06, 28-10-2018 | #21 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Amunrah:
— т.е., ссылка на самого себя. |
|
Отправлено: 13:21, 28-10-2018 | #22 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Цитата Amunrah:
|
|
Последний раз редактировалось alpap, 28-10-2018 в 16:38. Отправлено: 16:19, 28-10-2018 | #23 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать Цитата Amunrah:
Ну, если это лабораторка, тогда конечно ...
@Echo Off Set "BoxIn=Z:\Box_In\Мой контент\Книги" Set "BoxOut=Z:\Box_Out\Книги" FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "Now=%%d" Set Now=%Now:~0,14% For /F "usebackq delims=" %%i IN (`2^>nul Dir "%BoxIn%\*.*" /B /S /A:-D`) DO Call :MySort "%%i" "%BoxOut%" %Now% GoTo :Eof :MySort Set "NewDir=%~x1" If "%NewDir%"=="" Set "NewDir=.." Set "NewDir=%~2\%NewDir:~1%" If Not Exist "%NewDir%" Md "%NewDir%" >>"%NewDir%\^^^^^^_%3.Log" Echo %~t1 %1 Copy %1 "%NewDir%\" >nul GoTo :Eof Если всё же вам нужны строго определённые расширения,то
@Echo Off
Set "BoxIn=Z:\Box_In\Мой контент\Книги"
Set "BoxOut=Z:\Box_Out\Книги"
Set "Ext=.pdf .fb2 . .epub"
FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "Now=%%d"
Set Now=%Now:~0,14%
For %%e IN (%Ext%) DO (
For /F "usebackq delims=" %%i IN (`2^>nul Dir "%BoxIn%\*%%e" /B /S /A:-D`) DO Call :MySort "%%i" "%BoxOut%" %Now%
)
GoTo :Eof
:MySort
Set "NewDir=%~x1"
If "%NewDir%"=="" Set "NewDir=.."
Set "NewDir=%~2\%NewDir:~1%"
If Not Exist "%NewDir%" Md "%NewDir%"
>>"%NewDir%\^^^^^^_%3.Log" Echo %~t1 %1
Copy %1 "%NewDir%\" >nul
rem Move /Y %1 "%NewDir%\" >nul
GoTo :Eof
|
|
------- Последний раз редактировалось megaloman, 28-10-2018 в 16:52. Отправлено: 16:45, 28-10-2018 | #24 |
Новый участник Сообщения: 24
|
Профиль | Отправить PM | Цитировать megaloman
Цитата megaloman:
А если не заморачиваться, то можно так: |
|
Последний раз редактировалось Amunrah, 28-10-2018 в 22:08. Отправлено: 19:01, 28-10-2018 | #25 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать Amunrah,
Цитата ChevConnor:
Я не всегда решаю задачи, как они сформулированы пользователем, не всегда задача бывает, на мой взгляд, сформулирована оптимально. Каюсь, грешен, ищу решение, которое считаю наилучшим. Грешен, не всегда получается с первого раза этого добиться. Завидую безгрешным. Простите мне этот грех |
|
------- Отправлено: 23:18, 28-10-2018 | #26 |
Новый участник Сообщения: 24
|
Профиль | Отправить PM | Цитировать megaloman
Цитата megaloman:
@echo off set "src=source_dir" set "dest=destination_dir" if not exist "%dest%\." md "%dest%" forfiles /p "%src%" /m * /s -c ^ "cmd /c if @isdir==FALSE xcopy @path %dest%\@ext\ /ifchy">>%dest%\log.txt echo."Время последних изменений - %date% %time:~0,8%">>%dest%\log.txt @echo off set "src=source_dir" set "dest=destination_dir" if not exist "%dest%\." md "%dest%" forfiles /p "%src%" /m * /s /D:0 /c ^ "cmd /c if @isdir==FALSE xcopy @path %dest%\@ext\ /ifchy">>%dest%\log.txt echo."Время последних изменений - %date% %time:~0,8%">>%dest%\log.txt Цитата:
|
|||
Последний раз редактировалось Amunrah, 29-10-2018 в 11:04. Отправлено: 07:07, 29-10-2018 | #27 |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
|
|
Отправлено: 10:56, 29-10-2018 | #28 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать Amunrah, Простите за занудство.
Цитата Amunrah:
Возможно я извратил его недопустимым образом
Ваш первый батник отрабатывает нормально (разве что Ваш лог не нравится - но это мой испорченный вкус) ИМХО, если батник запускать многократно, тогда обязательно или в логе или в имени лога должна быть дата\время запуска |
|
------- Отправлено: 13:18, 29-10-2018 | #29 |
Новый участник Сообщения: 24
|
Профиль | Отправить PM | Цитировать megaloman
Цитата megaloman:
@echo off set "src=source_dir" set "dest=destination_dir" if not exist "%dest%\." md "%dest%" echo."Время начала запуска - %date% %time:~0,8%">>%dest%\log.txt forfiles /p "%src%" /m * /s /D 0 -c ^ "cmd /c if @isdir==FALSE xcopy @path %dest%\@ext\ /ifchy">>%dest%\log.txt echo."Обработка завершена - %date% %time:~0,8%">>%dest%\log.txt |
Отправлено: 13:48, 29-10-2018 | #30 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] получение списка имён файлов без имен папок (с подкаталогами) | shadowbat | Скриптовые языки администрирования Windows | 6 | 20-12-2015 19:29 | |
Любой язык - [решено] Архивирование файлов в каталоге | Tonny_Bennet | Скриптовые языки администрирования Windows | 53 | 11-01-2015 13:11 | |
CMD/BAT - Переименование файлов в каталоге | flower | Скриптовые языки администрирования Windows | 2 | 28-11-2013 15:00 | |
VBS/WSH/JS - Мониторинг файлов в каталоге | ugol_divana | Скриптовые языки администрирования Windows | 1 | 03-08-2013 17:15 | |
Любой язык - [решено] Распределение файлов в каталоге | Тишина | Скриптовые языки администрирования Windows | 2 | 26-04-2013 17:09 |
|