Страница 1 из 52
Групповое переименование
Добавлено: Чт окт 15, 2009 08:23
Rustem
Есть куча файлов вида "печать_xxxx.*" или "распечатано_XXXX.*" . Как в одной кнопке реализовать переименование :
1) если выбраны файлы вида "печать_xxxx.*" , то переименовываем в вид "распечатано_XXXX.*" ?
2) если выбраны файлы вида "распечатано_xxxx.*" , то переименовываем в вид "XXXX.*" ?
Добавлено: Чт окт 15, 2009 10:16
Batya
Rustem
vbs-скрипт подойдет или нужно, чтобы всё было обязательно прописано только в кнопке?
Добавлено: Чт окт 15, 2009 12:16
Вахмурка
Что касается "если выбрано", то только скриптом. Либо две кнопки, где пользователь сам решает, какую из них давить. А если кнопка одна (вопрос "если" снят), то:
- 1. Делаем шаблон группового переименования. Называем его "абв";
2. Делаем на панели кнопку MULTIRENAME абв;
3. Давим на кнопку. Потом остается только нажать Start (то есть, строго говоря, 2 кнопки).
Добавлено: Чт окт 15, 2009 13:05
Rustem
Мне в принципе не важно , скрипт это будет или нет . Главное чтобы была ОДНА кнопка , и чтобы это работало

.
Добавлено: Чт окт 15, 2009 13:40
Вахмурка
Если:
1.
Batya ничего не напишет на vbs (такое тоже возможно; не вечно же ему всем помогать); и
2. Тебя устроит скрипт на PowerPro
то я возьмусь. Я уже алгоритм в голове нарисовал

Добавлено: Чт окт 15, 2009 13:59
Rustem
А может чтобы не помечать файлы сделать так :
Задаём Фильтр ( печать*.* , распечатано*.* ) , затем Ctrl+B, и среди отображаемых файлов проводим операцию переименования . Такое возможно ?
Добавлено: Чт окт 15, 2009 14:13
Вахмурка
Это явно НЕ одна кнопка.
Я бы еще предложил сделать шаблон поиска. Выполняем LOADSEARCH, потом на панель и MULTIRENAME. Но опять же - НЕ ОДНА...
Ты бы сам сперва решил, что именно тебе нужно.
Добавлено: Чт окт 15, 2009 16:09
Rustem
Я просто плохо разбираюсь в скриптах . Поэтому и хотел узнать можно ли в скрипте прописать такую последовательность действий и повесить на кнопку. Значит решено : всё остаётся по-прежнему - одна кнопка...
Добавлено: Чт окт 15, 2009 16:30
Вахмурка
В скрипте можно прописать все! В пределах разумного.
В твоем исходном посте ххх отличаются регистром от ХХХ - это случайно? Если нет, распиши этот вопрос подробнее.
Ждем реакцию Бати.
Добавлено: Чт окт 15, 2009 17:22
Batya
vbs-реакция
Код: Выделить всё
'=========================================================================
' Переименование файлов, представленных в файле-списке или в папке:
' если имя начинается на {Word1}, то {Word1} заменяется на {Word2};
' если имя начинается на {Word2}, то {Word2} удаляется из имени.
'
' Параметры:
' {файл-список}|{папка}
'
' Примеры параметров при вызове из TC:
' %L
' "%P"
'
' Автор - Batya
'=========================================================================
Option Explicit
'======== Изменяемые параметры ===========================================
Const Word1 = "печать_" 'Первое начало имен файлов
Const Word2 = "распечатано_" 'Второе начало имен файлов
'=========================================================================
Dim Mess, FSO, WSH, FF, IsFolder, F, LW1, LW2
On Error Resume Next
Main:CheckErr
On Error GoTo 0
MessBox Mess(3), 3
Quit 0
'Основная процедура
Sub Main
SetMess
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WSH = CreateObject("WScript.Shell")
F = ""
CheckParam
LW1 = Len(Word1)
LW2 = Len(Word2)
If IsFolder Then
FolderProc FF
Else
For Each F In Split(FSO.OpenTextFile(FF).ReadAll, vbNewLine)
If F <> "" Then
F = GetPath(F)
If FSO.FileExists(F) Then
FileProc F
ElseIf FSO.FolderExists(F) Then
FolderProc F
End If
End If
Next
End If
End Sub
'Массив сообщений
Sub SetMess
Set Mess = CreateObject("Scripting.Dictionary")
With Mess
.Add 0, "Переименование по маске"
.Add 1, "Не указаны параметры!"
.Add 2, "Первый параметр не является файлом-списком или папкой!"
.Add 3, "Операция завершена."
End With
End Sub
'Проверка входных параметров
Sub CheckParam
If WScript.Arguments.Count = 0 Then Err.Raise vbObjectError + 1, "", Mess(1)
FF = GetPath(WScript.Arguments(0))
If Not FSO.FileExists(FF) Then
If Not FSO.FolderExists(FF) Then
Err.Raise vbObjectError + 2, "", Mess(2)
Else
IsFolder = True
End If
Else
IsFolder = False
End If
End Sub
'Обработка файла
Sub FileProc(pPath)
Dim lFName, lNewPath
lFName = FSO.GetFileName(pPath)
If Left(LCase(lFName), LW1) = LCase(Word1) Then
lNewPath = FSO.GetParentFolderName(pPath) & "\" & Word2 & Mid(lFName, LW1 + 1)
FileMove pPath, lNewPath
ElseIf Left(LCase(lFName), LW2) = LCase(Word2) Then
lNewPath = FSO.GetParentFolderName(pPath) & "\" & Mid(lFName, LW2 + 1)
FileMove pPath, lNewPath
End If
End Sub
'Перемещение файла
Sub FileMove(pPath, pNewPath)
FSO.MoveFile pPath, pNewPath
End Sub
'Обработка папки
Sub FolderProc(pPath)
Dim loF
Set loF = FSO.GetFolder(pPath)
For Each F In loF.SubFolders
F = F.Path
FolderProc F
Next
For Each F In loF.Files
F = F.Path
FileProc F
Next
Set loF = Nothing
End Sub
'Разложить путь при наличии переменных окружения
Function GetPath(pPath)
GetPath = FSO.GetAbsolutePathName(WSH.ExpandEnvironmentStrings(pPath))
End Function
'Проверка, нет ли ошибок
Sub CheckErr
Dim lMess
lMess = "Возникла ошибка № " & Err.Number & ":" & vbNewLine & Err.Description
If F <> "" Then lMess = lMess & vbNewLine & vbNewLine & "Файл\папка:" & vbNewLine & F
If Err.Number <> 0 Then
MessBox lMess, 1
Quit Err.Number
End If
End Sub
'Сообщение
Function MessBox(pMess, pMode)
Dim lIcon
Select Case pMode
Case 1 lIcon = vbCritical + vbOKOnly
Case 2 lIcon = vbExclamation + vbOKOnly
Case 3 lIcon = vbInformation + vbOKOnly
End Select
MessBox = MsgBox(pMess, lIcon, Mess(0))
End Function
'Выход
Sub Quit(pExitCode)
Set Mess = Nothing
Set WSH = Nothing
Set FSO = Nothing
WScript.Quit pExitCode
End Sub
Добавлено: Пт окт 16, 2009 08:46
Rustem
Вахмурка : На счет регистра (XXXX и xxxx ) - это случайность . Это не критично.
Batya : спасибо за оперативное реагирование - всё работает !
Добавлено: Пт окт 16, 2009 12:48
Batya
Rustem писал(а):А может чтобы не помечать файлы ...
Скрипт выше изменён. Теперь в качестве параметра можно указать папку, в которой следует обрабатывать файлы. Будут обработаны все файлы, в том числе во всех вложенных папках.
Добавлено: Сб янв 02, 2010 05:42
Itar-Tass
Как сделать так что бы только ПЕРВАЯ буква меняла регистр
при групповом переименовании а остальных операция не касалась.
Пример
a.D._Police[01_of_12]_[ru_jp]_[Animereactor_ru]
надо получить
A.D._Police[01_of_12]_[ru_jp]_[Animereactor_ru]
Если просто выбирать 1 заглавную
то превращается в
A.d._police[01_of_12]_[ru_jp]_[animereactor_ru]
Если все слова с заглавной то
A.D._Police[01_Of_12]_[Ru_Jp]_[Animereactor_Ru]
Это не то.Потом опять нужно править.
Как ограничить изменение регистра только первой буквой?
Добавлено: Сб янв 02, 2010 12:41
Volniy
Как ограничить изменение регистра только первой буквой?
Добавлено: Вс янв 31, 2010 19:08
_Johm
Volniy
ценный совет с ключами , [n].
А какие еще есть? Скажите секцию в справке.