Групповое переименование

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: d-view, Моторокер, Avada, CaptainFlint, Nik

Аватара пользователя
Rustem
Сообщения: 18
Зарегистрирован: Ср окт 07, 2009 13:57
Откуда: Башкортостан

Групповое переименование

Сообщение Rustem »

Есть куча файлов вида "печать_xxxx.*" или "распечатано_XXXX.*" . Как в одной кнопке реализовать переименование :
1) если выбраны файлы вида "печать_xxxx.*" , то переименовываем в вид "распечатано_XXXX.*" ?
2) если выбраны файлы вида "распечатано_xxxx.*" , то переименовываем в вид "XXXX.*" ?
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

Rustem
vbs-скрипт подойдет или нужно, чтобы всё было обязательно прописано только в кнопке?
Нет, я не сплю. Я просто медленно моргаю.
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

Сообщение Вахмурка »

Что касается "если выбрано", то только скриптом. Либо две кнопки, где пользователь сам решает, какую из них давить. А если кнопка одна (вопрос "если" снят), то:
  • 1. Делаем шаблон группового переименования. Называем его "абв";
    2. Делаем на панели кнопку MULTIRENAME абв;
    3. Давим на кнопку. Потом остается только нажать Start (то есть, строго говоря, 2 кнопки).
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Аватара пользователя
Rustem
Сообщения: 18
Зарегистрирован: Ср окт 07, 2009 13:57
Откуда: Башкортостан

Сообщение Rustem »

Мне в принципе не важно , скрипт это будет или нет . Главное чтобы была ОДНА кнопка , и чтобы это работало :) .
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

Сообщение Вахмурка »

Если:
1. Batya ничего не напишет на vbs (такое тоже возможно; не вечно же ему всем помогать); и
2. Тебя устроит скрипт на PowerPro

то я возьмусь. Я уже алгоритм в голове нарисовал :)
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Аватара пользователя
Rustem
Сообщения: 18
Зарегистрирован: Ср окт 07, 2009 13:57
Откуда: Башкортостан

Сообщение Rustem »

А может чтобы не помечать файлы сделать так :
Задаём Фильтр ( печать*.* , распечатано*.* ) , затем Ctrl+B, и среди отображаемых файлов проводим операцию переименования . Такое возможно ?
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

Сообщение Вахмурка »

Это явно НЕ одна кнопка.

Я бы еще предложил сделать шаблон поиска. Выполняем LOADSEARCH, потом на панель и MULTIRENAME. Но опять же - НЕ ОДНА...

Ты бы сам сперва решил, что именно тебе нужно.
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Аватара пользователя
Rustem
Сообщения: 18
Зарегистрирован: Ср окт 07, 2009 13:57
Откуда: Башкортостан

Сообщение Rustem »

Я просто плохо разбираюсь в скриптах . Поэтому и хотел узнать можно ли в скрипте прописать такую последовательность действий и повесить на кнопку. Значит решено : всё остаётся по-прежнему - одна кнопка...
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

Сообщение Вахмурка »

В скрипте можно прописать все! В пределах разумного. ;)

В твоем исходном посте ххх отличаются регистром от ХХХ - это случайно? Если нет, распиши этот вопрос подробнее.

Ждем реакцию Бати.
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение 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
Последний раз редактировалось Batya Пт окт 16, 2009 14:11, всего редактировалось 7 раз.
Нет, я не сплю. Я просто медленно моргаю.
Аватара пользователя
Rustem
Сообщения: 18
Зарегистрирован: Ср окт 07, 2009 13:57
Откуда: Башкортостан

Сообщение Rustem »

Вахмурка : На счет регистра (XXXX и xxxx ) - это случайность . Это не критично.
Batya : спасибо за оперативное реагирование - всё работает !
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

Rustem писал(а):А может чтобы не помечать файлы ...
Скрипт выше изменён. Теперь в качестве параметра можно указать папку, в которой следует обрабатывать файлы. Будут обработаны все файлы, в том числе во всех вложенных папках.
Нет, я не сплю. Я просто медленно моргаю.
Itar-Tass
Сообщения: 48
Зарегистрирован: Сб янв 17, 2009 23:51

Сообщение 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]
Это не то.Потом опять нужно править.
Как ограничить изменение регистра только первой буквой?
Аватара пользователя
Volniy
Сообщения: 585
Зарегистрирован: Ср дек 15, 2004 00:17
Откуда: Местный

Сообщение Volniy »

Как ограничить изменение регистра только первой буквой?

Код: Выделить всё

[U][N1][n][N2-]
_Johm
Сообщения: 119
Зарегистрирован: Вс май 14, 2006 20:03

Сообщение _Johm »

Volniy
ценный совет с ключами , [n].
А какие еще есть? Скажите секцию в справке.
Ответить