Страница 2 из 4
Добавлено: Сб фев 02, 2013 19:29
Petr_Ch
Flasher
Ок. Кратко.
Скрипт 1.
Дано:
C:\temp\11111111111\1\pic\0001.jpg
C:\temp\11111111111\1\pic\0002.jpg
C:\temp\11111111111\1\pic\0003.jpg
C:\temp\11111111111\2\pic\0001.jpg
C:\temp\11111111111\2\pic\0002.jpg
C:\temp\11111111111\2\pic\0003.jpg
C:\temp\11111111111\3\pic\0001.jpg
C:\temp\11111111111\3\pic\0002.jpg
C:\temp\11111111111\3\pic\0003.jpg
C:\temp\11111111111\4\pic\0001.jpg
C:\temp\11111111111\4\pic\0002.jpg
C:\temp\11111111111\4\pic\0003.jpg
Надо получить:
C:\temp\22222222\1_0001.jpg
C:\temp\22222222\1_0002.jpg
C:\temp\22222222\1_0003.jpg
C:\temp\22222222\2_0001.jpg
C:\temp\22222222\2_0002.jpg
C:\temp\22222222\2_0003.jpg
C:\temp\22222222\3_0001.jpg
C:\temp\22222222\3_0002.jpg
C:\temp\22222222\3_0003.jpg
C:\temp\22222222\4_0001.jpg
C:\temp\22222222\4_0002.jpg
C:\temp\22222222\4_0003.jpg
Скрипт 2.
Дано:
C:\temp\22222222\1_0001.jpg
C:\temp\22222222\1_0002.jpg
C:\temp\22222222\1_0003.jpg
C:\temp\22222222\2_0001.jpg
C:\temp\22222222\2_0002.jpg
C:\temp\22222222\2_0003.jpg
C:\temp\22222222\3_0001.jpg
C:\temp\22222222\3_0002.jpg
C:\temp\22222222\3_0003.jpg
C:\temp\22222222\4_0001.jpg
C:\temp\22222222\4_0002.jpg
C:\temp\22222222\4_0003.jpg
Надо получить:
C:\temp\11111111111\1\pic\0001.jpg
C:\temp\11111111111\1\pic\0002.jpg
C:\temp\11111111111\1\pic\0003.jpg
C:\temp\11111111111\2\pic\0001.jpg
C:\temp\11111111111\2\pic\0002.jpg
C:\temp\11111111111\2\pic\0003.jpg
C:\temp\11111111111\3\pic\0001.jpg
C:\temp\11111111111\3\pic\0002.jpg
C:\temp\11111111111\3\pic\0003.jpg
C:\temp\11111111111\4\pic\0001.jpg
C:\temp\11111111111\4\pic\0002.jpg
C:\temp\11111111111\4\pic\0003.jpg
Идеи?
Добавлено: Сб фев 02, 2013 19:33
Flasher
Petr_Ch
Оверквотить и расписывать исходную задачу никто не просил. По ней уже приводилась реализация (по крайней мере в отношении первой части). Если памятка не читалась (как можно видеть), то это не проблема помогающего.
Конечной цели, я так понял, мы так и не увидим.
Добавлено: Сб фев 02, 2013 19:56
Petr_Ch
Flasher
Ок. Перефразирую проще.
Имеем некий массив "а". Надо только средствами TC преобразовать его в массив "Б".
Примеры:
Массив "А".
C:\temp\11111111111\1\pic\0001.jpg
C:\temp\11111111111\1\pic\0002.jpg
C:\temp\11111111111\1\pic\0003.jpg
C:\temp\11111111111\2\pic\0001.jpg
C:\temp\11111111111\2\pic\0002.jpg
C:\temp\11111111111\2\pic\0003.jpg
C:\temp\11111111111\3\pic\0001.jpg
C:\temp\11111111111\3\pic\0002.jpg
C:\temp\11111111111\3\pic\0003.jpg
C:\temp\11111111111\4\pic\0001.jpg
C:\temp\11111111111\4\pic\0002.jpg
C:\temp\11111111111\4\pic\0003.jpg
Массив "Б".
C:\temp\22222222\1_0001.jpg
C:\temp\22222222\1_0002.jpg
C:\temp\22222222\1_0003.jpg
C:\temp\22222222\2_0001.jpg
C:\temp\22222222\2_0002.jpg
C:\temp\22222222\2_0003.jpg
C:\temp\22222222\3_0001.jpg
C:\temp\22222222\3_0002.jpg
C:\temp\22222222\3_0003.jpg
C:\temp\22222222\4_0001.jpg
C:\temp\22222222\4_0002.jpg
C:\temp\22222222\4_0003.jpg
Конечная цель - массив "Б". Всё. Точка. Нет третьего дна.
Куда уж проще я не знаю(((
Добавлено: Сб фев 02, 2013 20:01
Flasher
Ок. Вижу разницу. Появилось дополнительное условие с переименованием одного из родительских каталогов. Средствами ТС так не получится. Только скриптингом.
Теперь самое главное:
Petr_Ch писал(а):после редактирования файлов всё предстоит проделать в обратном порядке
Что понимается под редактированием файлов?
Скрипт, как я уже писал, простой (но идея кидать файлы туда-сюда пока в моей голове не укладывается):
Код: Выделить всё
'===============================================================================
' Перемещение jpg- и tif-файлов из папки ..\№\pic\ в корень выбранной папки
' с переименованием их по шаблону №_имя и последующим удалением пустых подпапок
' Параметры: "<путь к папке>" <имя новой папки>
' Пример: %V 22222222
'===============================================================================
With WScript.Arguments
If .Count < 2 Then : MsgBox "Укажите 2 параметра!", 4144 : Wscript.Quit : End if
Path = .Item(0) : NewName = .Item(1)
End With
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Folder = FSO.GetFolder(Path) : Folder.Name = NewName
NewPath = Folder.ParentFolder & "" & NewName
For Each Fd In FSO.GetFolder(NewPath).SubFolders
If IsNumeric(Fd.Name) Then
For Each Fl In FSO.GetFolder(Fd & "\pic").Files
Ext = LCase(FSO.GetExtensionName(Fl))
If Ext = "jpg" Or Ext = "tif" Then Fl.Move NewPath & "" & Fd.Name & "_" & Fl.Name
Next : If Fd.Size = 0 Then Fd.Delete
End If
Next : Set FSO = Nothing : Set Folder = Nothing : WScript.Quit
Добавлено: Сб фев 02, 2013 21:45
Avada
Petr_Ch
Ещё раз: оверквотинг запрещён
правилами форума. Абсолютно никому не нужное полное цитирование предыдущих постов удалено.
И я хотел бы со своей стороны понять: чем не устраивает редактирование в режиме показа файлов без подкаталогов и зачем вообще все эти переносы? Видимо, в самом деле надо пояснить, что же понимается под редактированием.
Добавлено: Вс фев 03, 2013 22:32
Batya
Petr_Ch писал(а):Код подправил, но выдает ошибку. Что-то в предпоследней строчке ему не нравится.
Прошу прощения - писал без проверки и ошибся немного. Попустил "Then". Эта строка должна быть:
Код: Выделить всё
If (lE = "jpg") Or (lE = "tif") Then FSO.MoveFile pFile.Path, lF
Исправил и соответствующий пост.
Petr_Ch писал(а):Хотя, судя по всему, он и начальные команды не выполняет(((
Ну, это будет видно, когда скрипт отработает без ошибок.
Также не следует забывать, что исходный (и нынешний модифицированный) скрипт работает с выделенными
папками.
И ещё - исходный скрипт после переноса удаляет папки. Если этого не требуется, нужно удалить или закомментировать сроку:
Добавлено: Пт фев 08, 2013 23:54
Petr_Ch
Flasher писал(а):Ок. Вижу разницу. Появилось дополнительное условие с переименованием одного из родительских каталогов.
Вы немного нетак меня поняли. Переименовывать или удалять никаких каталогов не надо. И к файлам надо не номера дописывать, а имя папки над папкой "pic".
Avada, извиняюсь за оверквотинг, но явно нужны ещё пояснения.
Путь был:
C:\111111\abrakadabra\pic\0000001.jpg
Путь стал:
D:\temp\abrakadabra_0000001.jpg
Где "D:\temp" даны просто для примера. Это может быть родительский каталог или просто вторая панель. Не важно.
А в целом ваш скрипт сработал, но он файлы ни на дюйм не сдвинул. Просто переименовал исходную папку.
Batya писал(а):Пропустил "Then"...
Подправил скрипт. Запускаю → за долю секунды что-то происходит, но в результате всё остаётся как было.
Добавлено: Сб фев 09, 2013 00:03
Flasher
Petr_Ch писал(а):Переименовывать или удалять никаких каталогов не надо.
Как запрашиваем, так и получаем:
Petr_Ch писал(а):преобразовать его в массив "Б".
Petr_Ch писал(а):но он файлы ни на дюйм не сдвинул.
На какой папке курсор и какие параметры? Если опять нет желания обращаться к памятке с рекомендациями при проблемах, то это не моя вина.
Добавлено: Сб фев 09, 2013 21:14
Petr_Ch
Flasher писал(а):На какой папке курсор и какие параметры?
(c:\temp\XXXX\pic\0001.jpg)
Курсор на папках XXXX.
Параметры %V c:\temp "11"
Как и писал ранее скрипт просто переименовывает temp в 11.
Flasher писал(а):Если опять нет желания обращаться к памятке с рекомендациями при проблемах, то это не моя вина.
Что за памятка?
Добавлено: Сб фев 09, 2013 21:28
Flasher
Petr_Ch писал(а):Параметры %V c:\temp "11"
А где в шапке скрипта указано, что параметра 3?
c:\temp тут ни к чему вообще. Кавычки для имени (11) без пробелов не требуются, опять же они не указаны.
Petr_Ch писал(а):Что за памятка?
Единственная тема, прикрепленная к подфоруму. Неужели не видно?
Добавлено: Пн фев 11, 2013 15:19
Petr_Ch
Flasher писал(а):А где в шапке скрипта указано, что параметра 3?
Но ваш параметр %V 22222222 выдаёт сообщение "укажите два параметра".
В памятке ответов не нашел((
У меня тотал 7.04a.
Добавлено: Пн фев 11, 2013 15:44
Flasher
Petr_Ch
Речь про проблемы, нижняя часть памятки.
Не удивительно, что выдаёт. %V в такой старой версии ТС и в помине не было. Заменить на %P%N.
Добавлено: Пн фев 11, 2013 16:55
Batya
Petr_Ch писал(а):Подправил скрипт. Запускаю → за долю секунды что-то происходит, но в результате всё остаётся как было.
Выполнено ли следующее?
Batya писал(а):Также не следует забывать, что исходный (и нынешний модифицированный) скрипт работает с выделенными папками.
Из
этого примера это папки
C:\temp\11111111111\1
C:\temp\11111111111\2
C:\temp\11111111111\3
C:\temp\11111111111\4
Добавлено: Вт фев 12, 2013 10:39
Petr_Ch
Flasher
%P%N не помогло.
Обновил версию тотала до 8.1, но скрипт по прежнему всего лишь переименовывает папку, на которой курсор. (независимо от кол-ва выделенных папок).
Версия wscript.exe 5.7.0.18066
WinXP x86
Batya
Выделять пробовал самые разные папки. Не помогает.
Параметр %L
Добавлено: Вт фев 12, 2013 12:25
Flasher
Petr_Ch
Перейдём к конкретике. Берём указанный в точности
тут список. Устанавливаем курсор на папке 11111111111. Жмём такую кнопку:
Код: Выделить всё
TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Scripts\MoveImages.vbs
%P%N 22222222
wcmicons.dll,76
Изменить имя каталога и переместить картинки из его структуры в корень
Работает - нет?