Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Удаление в 50 каталогах лишних папок, с сохранением файлов
Goto page 1, 2, 3, 4, 5, 6, 7, 8  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Mon Apr 18, 2011 02:18    Post subject: Удаление в 50 каталогах лишних папок, с сохранением файлов Reply with quote

Здравствуйте! У меня такая проблема- есть 100 каталогов имеющих структуру (папка1- файлы jpg-вложенная папка2 с файлами jpg ) и такая комбинация повторяется100 раз. Объем каждой папки приличный. Во всех 100 каталогах папка1 имеет разные имена - файлы jpg тоже все разные. А вот вложенная папка2 (во всех 100 каталогах имеет одинаковое имя - но файлы jpg в ней разные) Нужно удалить в каждом каталоге вложенную папку2, но файлы jpg удалять естественно не нужно. То есть они должны переместится в папку1. И так во всех 100 каталогах. Если кто сталкивался с такой проблемой - Прошу помочь. Заранее благодарен.
надеюсь что проблему обрисовал ясно. Спасибо.javascript:emoticon('Rolling Eyes')

 !  Avada:
Из "Общих вопросов" перенесено в "Автоматизацию".
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Mon Apr 18, 2011 07:42    Post subject: Reply with quote

1. Находимся в общей папке.
2. Ctrl+F12, кн. Шаблон, вкладка Плагины: tc | Путь | содержит | папка2\ > кн. Записать > любое имя > OK > OK.
3. Ctrl+B (cm_DirBranch), Ctrl+A
4. Выполнить скрипт:
Code:
'===================================
' Перемещение выделенных файлов на уровень вверх
' с удалением указанного родительского каталога
' Параметры: %L <имя удаляемой папки>
' Aвтор - Flasher (Batya)
'===================================
Dim  WSH, FSO, TempFile, File, MoveFiles, TargetPath, Folder

Set WSH = CreateObject("WScript.Shell")
If WScript.Arguments.Count < 2 Then
  WSH.Popup "Не указаны оба параметра!",1.5,"                      ВНИМАНИЕ !",48
  Wscript.Quit
End If

Set FSO = CreateObject("Scripting.FileSystemObject")
Set TempFile = FSO.OpenTextFile(WScript.Arguments(0), 1)
MoveFiles = ""

Do While Not TempFile.AtEndOfStream
  Set File = FSO.GetFile(TempFile.ReadLine)
  TargetPath = File.ParentFolder.ParentFolder
   On Error Resume Next
   If Not FSO.FileExists(TargetPath & "\" & File.Name) Then
     FSO.MoveFile File, TargetPath & "\"
     MoveFiles = MoveFiles + File.Name & chr(13)
   End If
Set Folder = FSO.GetFolder(TargetPath&"\"&WScript.Arguments(1))
   If Folder.Size < 1 Then
     Folder.Delete
   End If
Loop

If MoveFiles<>"" Then
  WSH.Popup "Файлы перемещены!",1,"Результат",64
Else
  WSH.Popup "Перемещений файлов не было!",1.4,"                      ВНИМАНИЕ !",48
   End If

Set WSH = Nothing
Set TempFile = Nothing
Set Folder = Nothing
Set File = Nothing
Set FSO = Nothing
Wscript.Quit
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Thu May 19, 2011 15:36    Post subject: Пытаюсь разобраться Reply with quote

Спасибо за помощь, но к сожалению что- то - не палучается. Несколько дней читал форум пытался разобраться с командами (в скриптах я не силен) На данный момент разобрался с созданием кнопок- создал кнопку для вашего скрипта в параметрах запуска указал %L "dol" (dol - имя папки которую надо удалить). Выделяю выбранные каталоги жму копку- вылетает ошибка narod.ru/disk/13393552001/osibka.jpg.html в чем может быть проблема?
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Thu May 19, 2011 19:58    Post subject: Reply with quote

Ого, уже месяц прошёл. Я думал, что всё сразу стало понятно.

shveicar wrote:
Выделяю выбранные каталоги
В режиме DirBranch невозможно выделить каталоги.

Если имя папки будет dol, то во 2-ом пункте меняем папка2\ на dol\ соответственно.
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Fri May 20, 2011 00:39    Post subject: Reply with quote

Спасибо за внимание Долго не отвечал потому-что сразу не получилось и все сделал в ручную а теперь возникла аналогичная ситуация только объем информации стал еще больше. Попробовал как вы сказали - заработало, файлы перемещаются но папки dol удалять не хочет! пишет перемещение выполнено, и все. и еще вопрос - если при перемещении имена файлов будут совпадать возможна ли автоматическая замена имен например счётчик? Сейчас активно изучаю раздел автоматизации, нашел один скрипт (немного подправил нумерацию) для тестирования данной команды скрипт рабочий, Но опять же в рамках данной темы можно ли создать эти папки не там где лежит скрипт, а в выбранной директории?
Code:
'=============================================================
' Создание в текущем каталоге папок с именами 001 ... 099
'=============================================================

Option Explicit
Dim FSO, i
Set FSO = CreateObject("Scripting.FileSystemObject")
For i = 1 To 99
FSO.CreateFolder i \ 100  & (i Mod 100)\ 10  & (i Mod 10)
Next
 
Set FSO = Nothing
WScript.Quit
Заранее благодарен.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Fri May 20, 2011 01:13    Post subject: Reply with quote

shveicar wrote:
Долго не отвечал потому-что сразу не получилось и все сделал в ручную
Дело, конечно, житейское, но лучше в таких случаях сразу писать, что не получается. И себе время можно сэкономить и помогающему это позволит оставаться в тонусе по данной теме.
shveicar wrote:
Попробовал как вы сказали - заработало, файлы перемещаются но папки dol удалять не хочет!
Вообще-то кавычки вокруг dol в качестве 2-го параметра не требуются, я их в синтаксисе не приводил. И что насчёт пути запуска в кнопке - он очищен?
shveicar wrote:
если при перемещении имена файлов будут совпадать возможна ли автоматическая замена имен например счётчик?
Сделать можно. Стоило сразу в условии написать, тогда бы смог поправить скрипт. А сейчас уже заблокировано. Кусок кода позже пришлю.
shveicar wrote:
Но опять же в рамках данной темы можно ли создать эти папки не там где лежит скрипт, а в выбранной директории?
Не понял. Какие папки создать, для чего? И зачем их помещать вместе со скриптом?
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Fri May 20, 2011 02:47    Post subject: Reply with quote

Quote:
Вообще-то кавычки вокруг dol в качестве 2-го параметра не требуются, я их в синтаксисе не приводил. И что насчёт пути запуска в кнопке - он очищен?
С кавычками -это я перепутал имя папки должно быть в <dol> иначе не работает, с кнопкой все в порядке путь указан до скрипта. Иначе бы команда не работала. В принципе после перемещения пустые папки находятся и удаляются с помощью плагина filex так что это не проблема. А вот с проблемой совпадения имен буду ждать от Вас дополнения. И если вам не трудно подскажите источник информации об основных командах скриптов vbs (или это тайна за семью замками) не то что бы я очень любопытен просто иногда можно подправить скрипт своими силами - если конечно знать как.
Quote:
Не понял. Какие папки создать, для чего? И зачем их помещать вместе со скриптом?
В данном случае я имел ввиду скрипт позволяющий создать с помощью кнопки сразу 100 папок (я использовал их для тестирования Вашего скрипта) дело в том что скрипт лежит в корневой директории total comandera и при создании папок они также создаются внутри этой директории пробовал менять параметры запуска в кнопке скрипта но это не помогает, папки все равно создаются в той же директории что и скрипт.(конечно можно их каждый раз перемещать в ручную в нужный каталог) но мне кажется можно сделать добавку к коду скрипта указанного выше чтобы папки сразу создавались в выбранной директории. Если это конечно не очень сложно. Спасибо.

Добавлено спустя 12 минут:

Да и еще, Script Helper себе поставил - (полезная штука) так что если Вам удобнее работать с его скриптами - для меня это не проблема. Еще раз Премного Благодарен.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Fri May 20, 2011 03:18    Post subject: Reply with quote

shveicar wrote:
с кнопкой все в порядке путь указан до скрипта.
Я пишу про Путь запуска, третье поле сверху. Оно должно быть пустым.
shveicar wrote:
И если вам не трудно подскажите источник информации об основных командах скриптов vbs
Тут приводил.

shveicar wrote:
В данном случае я имел ввиду скрипт позволяющий создать с помощью кнопки сразу 100 папок
А зачем? Разве задача не стоит папку с одним названием раскидать по куче других папок? Если да, то тут скрипт особо и не нужен. Достаточно создать одну папку (курсор на ней), в другой панели выделить папки, куда копируем, перейти обратно (Tab), нажать F5, в диалоге копирования нажать "Опции", отметить галкой нижнюю опцию и нажать Enter.
А если надо именно создать папки с именами выделенных папок/файлов, то здесь смотрим.

shveicar wrote:
Да и еще, Script Helper себе поставил - (полезная штука) так что если Вам удобнее работать с его скриптами - для меня это не проблема.
Нет. Он тут совершенно некстати.
Вообще, если я ничего не напутал, должно быть что-то наподобие этого:
Code:
   i=i+1
   If Not FSO.FileExists(TargetPath & "\" & File.Name) Then
     FSO.MoveFile File, TargetPath & "\"
     MoveFiles = MoveFiles + File.Name & chr(13)
   ElseIf FSO.FileExists(TargetPath&"\"&.GetBaseName(File)&" ("&Abs(i)&")."&.GetExtensionName(File)) Then
     File.Copy TargetPath&"\"&.GetBaseName(File)&" ("&Eval(i+1)&")."&.GetExtensionName(File)
   Else
     File.Copy TargetPath&"\"&.GetBaseName(File)&" (1)."&.GetExtensionName(File)
   End If

между
Code:
TargetPath = File.ParentFolder.ParentFolder
и
Code:
Set Folder = FSO.GetFolder(TargetPath&"\"&WScript.Arguments(1))

Пусть другие поправят, если что не так.
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Fri May 20, 2011 09:15    Post subject: Reply with quote

Пока своего решения не предлагаю, т.к. уже есть вышеприведённый вариант, но что-то мне подсказывает, что задача описана неверно. Посему, хочется задать наводящий вопрос.

shveicar
А другие вложенные папки в этих 100 каталогов есть?
Может быть задача звучит - перенести все вложенные файлы с автоматическим переименованием в головную папку и удалить пустые вложенные папки?
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Fri May 20, 2011 09:54    Post subject: Reply with quote

Batya wrote:
перенести все вложенные файлы с автоматическим переименованием в головную папку
Головная - это родительская или общая? Нужна родительская папка для удаляемой папки.
Batya wrote:
и удалить пустые вложенные папки?
Опустевшие после перемещения из них файлов точнее сказать.
Собственно, и то и другое отражено в скрипте. Единственное, насчёт приведённого куска с счётчиком не уверен. Проверь, что там так или не так, пож..
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Fri May 20, 2011 10:39    Post subject: Reply with quote

Flasher wrote:
Головная - это родительская или общая? Нужна родительская.

Под головной я подразумевал каждую из "100 каталогов" для соответствующих вложенных в них файлов.

Flasher wrote:
Опустевшие после перемещения из них файлов точнее сказать.

Это я и имел в виду.

Скрипт пока проверять пока не буду. Хочу дождаться ответа автора запроса. Я подозреваю, что не надо париться с конкретным именем вложенной папки ("папка2") и конкретным списком файлов - вероятно, надо переместить все файлы из вложенных папок. В этом случае реализация скрипта будет немного по-другому и проще.
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Fri May 20, 2011 10:43    Post subject: Reply with quote

Batya wrote:
вероятно, надо переместить все файлы из вложенных папок
Такая вероятность не исключена. Я просто подстраховался. В общем, ждём ответа.
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Fri May 20, 2011 13:22    Post subject: Reply with quote

Здравствуйте господа! Спасибо всем за проявленный интерес.
А теперь по теме- путь запуска для скрипта от Flasher -udalenie.vbs(точнее в созданной для его запуска кнопки) пустой. Оставлены только командаSadC:\Program Files\total comander rus and pluginx32 portabl\Utils\udalenie.vbs) параметры: (в моем случае %L <dol>) и файл значкаSadC:\Program Files\total comander rus and pluginx32 portabl\Tcmadmin.exe)
Скрипт -еще раз повторюсь срабатывает (правда выскакивает окно -перемещение файлов не было!), но файлы перемещаются.
Все остальные действия выполнил в точности.(Ctrl+F12, кн. Шаблон, вкладка Плагины: tc | Путь | содержит | dol\ > кн. Записать > присвоено имя(удаление) > OK > OK (галочка поиск с плагинами не отмечена)
далее Ctrl+B (у меня кнопка-показать все файлы без каталогов) и затем
Ctrl+A (файлы выделяются красными) и наконец- кнопка выполнить скрипт. По поводу моего скрипта(точнее модернизированного мной) изначально он выглядел так источник(www.tckb.ru/wiki/)
Quote:
'=============================================================
' Создание в текущем каталоге папок с именами 1_1_1 ... 9_9_9
'=============================================================

Option Explicit
Dim FSO, i
Set FSO = CreateObject("Scripting.FileSystemObject")
For i = 111 To 999
FSO.CreateFolder i \ 100 & "_" & (i Mod 100)\ 10 & "_" & (i Mod 10)
Next

Set FSO = Nothing
WScript.Quit
Данный скрипт я решил использовать для проверки действий с помощью скрипта от Flasher (дабы не напортачить с оригиналом) кстати правильно сделал - иначе бы некоторые картинки пропали так как при перемещении (в случае совпадения имен) один файл заменялся другим-(надеюсь на доработку,совет по модернизации- сейчас проверю ). Что касается скрипта создающего каталоги (с указанием их кол-ва) c именами выделенных
папок/файлов- спасибо но это другое назначение. В моем случае для проверки алгоритм действия такой. Создаю 100 пустых каталогов (в выбранном разделе) создаю папку с именем dol (в другом разделе), там же создаю файл пустышку (например index.html) перемещаю его в папку Dol переименовываю исходный (index.html в 1.html) и дальше копирую (паку dol, вложенный в неё файл index.html и 1.html) во все созданные 100 каталогов сразу. Ну а затем проверяю скрипт от Flasherа. Мой вопрос про скрипт создающий 100 пустых папок зараз- был вызван именно тем моментом что приходилось каждый раз (когда я пытался проверить скрипт от Flashera) перемещать вручную созданные 100 каталогов в нужную мне директорию, а хотелось бы чтобы эти пустые каталоги сразу создавались в нужной мне директории. Конечно кто-нибудь может сказать, что можно было бы сделать все проще - но мой опыт работы, на данный момент весьма не велик и я делаю именно так. В любом случае буду рад услышать ваши советы, спасибо за информацию!
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Fri May 20, 2011 13:28    Post subject: Reply with quote

shveicar
Ничего не понял!
Давай полностью с самого начала, что ты хочешь получить?
Не забудь ответить на мой вопрос:
Batya wrote:
Может быть задача звучит - перенести все вложенные файлы с автоматическим переименованием в головную папку и удалить пустые вложенные папки?

_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Fri May 20, 2011 14:23    Post subject: Reply with quote

Еще раз с самого начала! Существует (100) каталогов-имена у всех разные, в каждом из них
файлы к примеру jpg (их число везде разное), кроме того в каждом из 100 каталогов содержатся(помимо файлов) еще папки(каталоги),имя у всех одинаковое(dol) в которых в свою очередь также лежат файлы jpg Других файлов(кроме jpg) в папке дол нет.
Задача- разом переместить все файлы(jpg) из всех каталогов (dol) на один уровень вверх (то-есть папки dol останутся пустые) и по возможности сразу удалить все папки dol Естественно при перемещении имена файлов jpg могут совпасть поскольку имеют нумерацию 1,2,3 итд. (но на самом деле файлы все разные) - поэтому при перемещении файлы с одинаковыми именами не должны пропасть - а должны быть переименованы по счётчику. Вот в принципе и всё.
Все остальные вопросы(скрипт создающий 100пустых каталогов) имели отношения всего лишь к проверке созданного скрипта.
И в завершении еще один вопрос - Существует 30 каталогов в них более 1000 jpg (имена jpg у всех разные) но в каждом каталоге находятся по 5,6 файлов одинакового содержания но имеющие разное разрешение например 960х768, 1080х764.и др Как правильно задать поиск чтобы найти все jpg ( во всех каталогах) с нужным разрешением например 960х768 чтобы затем их можно было удалить? Пытался по всякому задавать поиск (параметров поиск по разрешению не нашел) Спасибо.

Добавлено спустя 13 минут:

Да и ответ на вопрос
Quote:
Может быть задача звучит - перенести все вложенные файлы с автоматическим переименованием в головную папку и удалить пустые вложенные папки?
- на данный момент такой задачи нет,(поскольку как я понимаю все файлы из всех папок попадут в один общий (начальный)каталог) а нужно всего лишь переместить их на один уровень вверх и удалить пустые вложенные папки. Но если уже существует готовое решение(скрипт) именно для такого варианта тоже было бы неплохо иметь его под рукой (вдруг понадобится выполнить такое задание). Спасибо.

Добавлено спустя 39 минут:

По поводу совета
Code:
 i=i+1
   If Not FSO.FileExists(TargetPath & "\" & File.Name) Then
     FSO.MoveFile File, TargetPath & "\"
     MoveFiles = MoveFiles + File.Name & chr(13)
   ElseIf FSO.FileExists(TargetPath&"\"&.GetBaseName(File)&" ("&Abs(i)&")."&.GetExtensionName(File)) Then
     File.Copy TargetPath&"\"&.GetBaseName(File)&" ("&Eval(i+1)&")."&.GetExtensionName(File)
   Else
     File.Copy TargetPath&"\"&.GetBaseName(File)&" (1)."&.GetExtensionName(File)
   End If
сделал как указали вообще перестал скрипт работать выскакивает ошибка строка 25 символ 4 неверная или неквалифицированная ссылка код 800А01F9. Прям беда какая-то с этим скриптом.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page 1, 2, 3, 4, 5, 6, 7, 8  Next
Page 1 of 8

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group