![]() |
Сортировка файлов в каталоге с подкаталогами
Прошу помощи! У меня есть каталог ( папка ) с подкаталогами ( папками ). В каталоге есть файлы скажем .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 |
ChevConnor, начните с описания того, что должен делать алгоритм, когда в разных подкаталогах ему встретятся одноимённые файлы.
Цитата:
Цитата:
|
У меня есть папка, в ней файлы и папки (формата .txt .pdf .doc). Мне нужен сценарий, способный рассортировать файлы (и те что во вложенных каталогах) по расширению, в отдельном каталоге (папке) с подкаталогами, соответствующие расширению. Ну и чтобы после выполнения сценария создавался файл-отчет.txt c датой\временем последних изменений.
По тому "сценарию" (его подобию скорее) у меня сортируются файлы в каталоге в котором находится батник, а подкаталоги не затрагиваются. Дату\время последних изменений записывает в отдельном файле, это вроде получилось. |
Цитата:
Цитата:
Цитата:
а вообще не судьба открыть справку: dir /? и почитать как ею пользоваться? |
Понимал бы я как с подкаталогов скопировать файлы, я бы не создавал тему, проблема в этом у меня заключается
|
|
Увы, 2й день сижу, я в этом деле, не как вы, а новичок можно сказать, плоховато у меня с написанием, вот и решил попросить помощи у знающих людей, а советов, кроме как банально открыть dir /? как то и нету, одни подколы
|
ChevConnor, Вы не ответили на вопрос: что должен делать алгоритм, когда ему в разных каталогах встретятся одноимённые файлы? Например, в каталоге …\Моя папка\Моя новая папка ему встретился файл Мой любимый файл.doc, он его скопировал/переместил в каталог …\Моя любимая папка для сортировки\DOC под тем же именем Мой любимый файл.doc. Затем он встречает в каталоге …\Моя папка\Моя новая папка 2 файл с ровно тем же именем — Мой любимый файл.doc. Что должен сделать алгоритм?
Цитата:
Ваша проблема в том, что Вы не можете сами для себя точно сформулировать задачу. |
Cоздать копию думаю. Просто файлов много и там названия неповторяющиеся (Pm1024zm.txt Pm1025zm.txt и т.д) не задумывался над этим
|
Еcли расширения известны.
C сохранением структуры папок+создаются файлы ^^^^^^.log в каждой выходной папке по расширению Код:
@Echo Off Еcли расширения известны.
Без сохранениея структуры папок+создаются файлы ^^^^^^.log в каждой выходной папке по расширению Код:
@Echo Off |
Немного не получилось, скрипт создал папки, с названием расширения, но ничего не копировал в них, лишь создавая пустой файл .log. Мне нужно понять, как сделать так, чтобы скрипт копировал\переносил файлы с подкаталогов и распределял их в отдельную папку с уже готовыми подкаталогами названия которых соответствуют расширению файлов.
Извиняюсь если непонятно обьясняю, просто 2й день уже голову ломаю, не мозг а каша.. |
ChevConnor, Прикрепите к сообщению свой скрипт, переименованный в txt.
Похоже, у Вас неправильный путь к файлам. Добавьте к коду 2 строки для отладки. Код:
@Echo Off |
Вложений: 1
вот, теперь вышло, большое спасибо!
|
А в повершеле такое реально сделать? если можно объясните как, заранее благодарен.
|
Цитата:
Цитата:
А вообще, примерно так: Код:
function make-cat { Name_copyXXX.ext где XXX - номер от 001 до 999 |
ChevConnor, не надо складывать результат работы туда же, откуда забираются файлы в работу:
Код:
Set "BoxIn=C:\Users\Claymore\Desktop\Files" Цитата:
Цитата:
там по порядку расписано какие есть команды, что они делают, как их использовать когда будет общее представление о языке, тогда можно будет уже обсудить конкретные неочевидные моменты |
а так не достаточно (по поводу даты изменения чего-то так и не дождался ответа, сделал просто лог с датой операции)?
Код:
@echo off |
Только с работы пришел, да лог с изменениями и датой подошел, спасибо огромное ребят, очень помогли
|
alpap Если счетчик не сбрасывать, то он у вас будет нумеровать вообще все файлы, стоит ему только раз получить значение...
|
ChevConnor,
Код:
@Echo Off В лог файле прописаны время изменения копируемого файла и его имя |
megaloman, Для чего к имени выходного каталога добавлять расширение? Нет же такого требования в условии ))
И, кстати, через exist можно проверить наличие каталога просто указав в конце слэш "\" |
Цитата:
Код:
if exist "Some path\." ( |
Цитата:
Код:
... |
Цитата:
Ну, если это лабораторка, тогда конечно ...
Код:
@Echo Off Если всё же вам нужны строго определённые расширения,то
Код:
@Echo Off |
megaloman
Цитата:
А если не заморачиваться, то можно так: Код:
@echo off |
Amunrah,
Цитата:
Я не всегда решаю задачи, как они сформулированы пользователем, не всегда задача бывает, на мой взгляд, сформулирована оптимально. Каюсь, грешен, ищу решение, которое считаю наилучшим. Грешен, не всегда получается с первого раза этого добиться. Завидую безгрешным. Простите мне этот грех :) |
megaloman
Цитата:
Код:
@echo off Код:
@echo off Цитата:
|
Цитата:
|
Amunrah, Простите за занудство.
Цитата:
Возможно я извратил его недопустимым образом
Код:
@echo off Ваш первый батник отрабатывает нормально (разве что Ваш лог не нравится - но это мой испорченный вкус) ИМХО, если батник запускать многократно, тогда обязательно или в логе или в имени лога должна быть дата\время запуска |
megaloman
Цитата:
Код:
@echo off |
Amunrah,
Вот вариант для многократного запуска. Повторное копирование файлов за одну дату/время не происходит
Код:
@Echo Off При многократном запуске наверное важен обзорный лог - сделал Можно задавать список масок: выбирай хоть избранные файлы, хоть все |
megaloman,
Цитата:
Мой вариант решает именно то, что озвучил топикстартер, не более. В forfiles к ошибке обычно приводит ключ /c (на некоторых виндах) поэтому вместо него рекомендуют использовать -с. В остальном все замечательно и утилита прекрасно справляется. Поэтому останусь при своем. А ключ /D можно использовать (или не использовать) как в forfiles, так и в xcopy: /D:m-d-y - Копирование файлов, измененных не ранее указанной даты. Если дата не указана, заменяются только конечные файлы, более старые, чем исходные. Скрытый текст
Код:
set "src=source_dir" Цитата:
|
Спасибо большое ребят. Очень помогли.
|
Цитата:
Код:
FOR /F "usebackq delims=" %%s IN (`CD`) DO Set "BoxIn=%%s" |
Время: 13:28. |
Время: 13:28.
© OSzone.net 2001-