View previous topic :: View next topic |
Author |
Message |
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Fri May 20, 2011 15:58 Post subject: |
|
|
shveicar wrote: | поскольку как я понимаю все файлы из всех папок попадут в один общий (начальный)каталог |
Неправильно понял. Нижеприведённый скрипт работает именно так, как ты хочешь. Работает по выделенным папкам - те самые твои "100 каталогов".
Code: | '======================================================================
' Для каждой из папок из файла-списка очищаются вложенные папки:
' файлы перемещаются в верхнюю папку (папка из файла-списка).
' При совпадении имён файлов выполняется автоматическое переименование.
' После выполнения переноса очищенные папки удаляются.
'
' Параметры:
' {файл-список}
'
' Пример параметров при вызове из TC:
' %L
'======================================================================
Option Explicit
Dim FSO, FF, F, SF
With WScript
If .Arguments.Count = 0 Then
MsgBox "Не заданы параметры!", vbOKOnly + vbCritical, "Очистка вложенных папок"
.Quit
End If
FF = .Arguments(0)
End With
Set FSO = CreateObject("Scripting.FileSystemObject")
With FSO.OpenTextFile(FF, 1)
Do While Not .AtEndOfStream
F = Trim(.ReadLine)
If F <> "" Then
If FSO.FolderExists(F) Then
For Each SF In FSO.GetFolder(F).SubFolders
On Error Resume Next
MoveFromFolder SF, F
If Err.Number = 0 Then FSO.DeleteFolder SF.Path
Err.Clear
On Error GoTo 0
Next
End If
End If
Loop
.Close
End With
Set FSO = Nothing
WScript.Quit
Sub MoveFromFolder(pSubFolder, pFolder)
Dim lF
For Each lF In pSubFolder.Files
MoveFile lF, pFolder
Next
For Each lF In pSubFolder.SubFolders
MoveFromFolder lF, pFolder
FSO.DeleteFolder lF.Path
Next
End Sub
Sub MoveFile(pFile, pFolder)
Dim lF
lF = pFolder
If Right(lF, 1) <> "\" Then lF = lF & "\"
lF = NextName(lF & pFile.Name)
FSO.MoveFile pFile.Path, lF
End Sub
Function NextName(pFilePath)
Dim lPath, lName, lExt, li, lAdd
Const lQ = 1 'Минимальное количество цифр в номере
With CreateObject("Scripting.FileSystemObject")
lPath = .GetParentFolderName(pFilePath)
If lPath <> "" Then lPath = lPath & "\"
lName = .GetBaseName(pFilePath)
lExt = .GetExtensionName(pFilePath)
NextName = pFilePath
Do While .FileExists(NextName)
li = li + 1
If li < 10^lQ Then
lAdd = Right(String(lQ, "0") & li, lQ)
Else
lAdd = li
End If
NextName = lPath & lName & "(" & lAdd & ")." & lExt
Loop
End With
End Function |
_________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
shveicar
Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Fri May 20, 2011 16:28 Post subject: |
|
|
Офтоп удалён. п. 9 правил.
Моторокер. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri May 20, 2011 20:04 Post subject: |
|
|
shveicar wrote: | Скрипт -еще раз повторюсь срабатывает (правда выскакивает окно -перемещение файлов не было!), но файлы перемещаются. | Странно, такого не должно быть исходя из условия в скрипте.
shveicar wrote: | иначе бы некоторые картинки пропали так как при перемещении (в случае совпадения имен) один файл заменялся другим | Нет, в случае совпадения файл бы не переписывался.
shveicar wrote: | Что касается скрипта создающего каталоги (с указанием их кол-ва) c именами выделенных
папок/файлов- спасибо но это другое назначение. | Нужно было создать кучу пустых каталогов с счётчиком. Почему другое?
shveicar wrote: | создаю файл пустышку (например index.html) перемещаю его в папку Dol переименовываю исходный (index.html в 1.html) и дальше копирую (паку dol, вложенный в неё файл index.html и 1.html) во все созданные 100 каталогов сразу. Ну а затем проверяю скрипт от Flasherа. Мой вопрос про скрипт создающий 100 пустых папок зараз- был вызван именно тем моментом что приходилось каждый раз (когда я пытался проверить скрипт от Flashera) перемещать вручную созданные 100 каталогов в нужную мне директорию, а хотелось бы чтобы эти пустые каталоги сразу создавались в нужной мне директории. Конечно кто-нибудь может сказать, что можно было бы сделать все проще - но мой опыт работы, на данный момент весьма не велик и я делаю именно так. В любом случае буду рад услышать ваши советы, спасибо за информацию! | Я уже дал чёткий ответ как средствами ТС копировать каталог/файл в любое кол-во выделенных папок. Что не устроило в том варианте? |
|
Back to top |
|
|
shveicar
Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Mon May 23, 2011 13:17 Post subject: |
|
|
Flasher -спасибо за помощь. Я уже разобрался. Надо мне было с самого начала больше читать и меньше задавать глупых вопросов. |
|
Back to top |
|
|
shveicar
Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Wed Jun 29, 2011 02:38 Post subject: |
|
|
А возможно ли подредактировать скрипт от Batya так, чтобы он удалял папку под курсором после перемещения из неё файлов и вложенных каталогов с файлами (с сохранением их структуры) на один уровень вверх? То-есть ставим курсор на папку. -жмем кнопку и все вложенные файлы и папки перемещаются в ту же директорию где находилась папка,(при совпадении имена переименовываются)- а сама - папка удаляется. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed Jun 29, 2011 06:09 Post subject: |
|
|
shveicar
Так пойдёт? |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Wed Jun 29, 2011 10:16 Post subject: |
|
|
shveicar wrote: | А возможно ли подредактировать скрипт от Batya ... ? |
Если не устроит приведённый Flasher вариант, могу сделать.
shveicar
И я не понял, текущий вариант моего скрипта для предыдущей задачи работает? _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed Jun 29, 2011 12:09 Post subject: |
|
|
Batya wrote: | И я не понял, текущий вариант моего скрипта для предыдущей задачи работает? | Помнится, положительный ответ был дан в этом посте. Но "кто-то" его счёл целиком оффтопным... |
|
Back to top |
|
|
shveicar
Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Wed Jun 29, 2011 14:28 Post subject: |
|
|
Спасибо большое Flasher - Это то, что надо!
Quote: | shveicar
И я не понял, текущий вариант моего скрипта для предыдущей задачи работает? | Конечно работает. Еще раз Спасибо Batya -за внимание. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed Jun 29, 2011 14:56 Post subject: |
|
|
shveicar
Пожалуйста. Но всё-таки пусть Batya сделает, потому что у меня нет функции со счётчиком. Она нужна в ситуациях существования одноимённых файлов в выделенных директориях, чтобы переименовывать файлы с числовым приращением.
ЗЫ: - этот смайл ставят, когда смешно. |
|
Back to top |
|
|
shveicar
Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Wed Jun 29, 2011 15:28 Post subject: |
|
|
Ну, если это возможно, - будет высший пилотаж! |
|
Back to top |
|
|
shveicar
Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Tue Jul 26, 2011 22:52 Post subject: |
|
|
Здравствуйте. Сегодня опять пришлось обратиться к этому скрипту Quote: | Для каждой из папок из файла-списка очищаются вложенные папки | с параметрами %L -он работает хорошо(единственное иногда, приходится применять к одному и тому-же каталогу, по два раза, поскольку с первого удаляет не всё?) Но почему-то с файлом списком, он не работает (возможно я неправильно что-то делаю) Поэтому прошу совета. Мои действия
Создаю файл список с полными путями к удаляемым папкам, на конце пути знак/ (уровень вложенности удаляемых папок равен 3) Помещаю файл список в обрабатываемый каталог, (в кнопке(параметры) указываю полный путь к файлу списку без %L) выделяю файл список и каталог, жму кнопку и ничего не происходит? Что здесь не так? |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed Jul 27, 2011 01:29 Post subject: |
|
|
shveicar
Я вообще не понял, для чего этот набор ненужных манипуляций. Всё, что нужно - это создать список каталогов и указать путь к нему вместо %L (без всяких знаков на конце), выделять ничего в таком случае не требуется. |
|
Back to top |
|
|
shveicar
Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Wed Jul 27, 2011 02:16 Post subject: |
|
|
Странно, не получается (вот пример из файла списка)
Code: | H:\1\CLARA-HU1-B-004\Video\CLARA-HU1-B-004-1280x720
H:\1\CLARA-HU1-B-004\Video\CLARA-HU1-B-004_video_640x368 | Соответственно должны удалиться папки Code: | CLARA-HU1-B-004-1280x720 и CLARA-HU1-B-004_video_640x368 | однако ничего не происходит. Проверил на созданных папках(чтобы не портить оригинал) - обнаружил, что дело видимо в именах папок(опять странно-ведь с параметром%L без списка папки удаляет), поскольку с примитивными именами скрипт работает, но вод ведь проблема, при указании пути типа Code: | папка1\1\удаляемая папка\ | (если на конце имени папки в списке нет знака(\) то вообще не работает), удаляются все папки кроме папка1. если изменить путь то удалится папка(\1\), а если нужно удалить именно (\удаляемая папка\) то как должен выглядеть список? |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed Jul 27, 2011 08:41 Post subject: |
|
|
Попробуй заменить соотв. кусок на этот:
Code: | With FSO.OpenTextFile(FF, 1)
Do While Not .AtEndOfStream
If F <> "" Then
If FSO.FolderExists(F) Then
Set F = .GetFolder(.ReadLine)
For Each SF In F.SubFolders
On Error Resume Next
MoveFromFolder SF, F
If Err.Number = 0 Then FSO.DeleteFolder SF.Path
Err.Clear
On Error GoTo 0
Next
If F.Size = 0 Then F.Delete
End If
End If
Loop
.Close
End With |
shveicar wrote: | если на конце имени папки в списке нет знака(\) то вообще не работает | Исходя из контекста я понял, что речь шла о пути в параметрах. К папкам, естественно, косую черту желательно указывать. |
|
Back to top |
|
|
|
|
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
|