Страница 17 из 52

Добавлено: Чт апр 11, 2013 11:06
sa
Можно выбрать файлы по фильтру *.decrypted01.*, затем переименовать их в инструменте группового переименования с одновременным переносом в подпапку TEMP, для чего указать в поле “Маска для: имени файла” TEMP\[N], в поле “Найти:” .decrypted01, в поле “Заменить на:” <Пусто>. И наконец, переместить их обратно, заменив существующие.
P.S.
Пардон, я со своим ответом ошибся форумом. Это ж не "Общие вопросы"!

Добавлено: Пт апр 12, 2013 15:35
Flasher
Koter >>

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

'============================================================================= 
' Замена в именах выделенных элементов списка в активном каталоге ТС
' с удалением имеющихся элементов с аналогичными присвоенными именами

' Условие: путь запуска - пустой

' Параметры:
' 1) %WL
' 2) "<искомая строка>" (если нет, ввод в окне)
' 3) "<новая строка>" (если нет, ввод в окне - * в качестве пустой строки)
'============================================================================= 
With WScript.Arguments
  C = .Count : If C = 0 Then WScript.Quit
  List = .Item(0)
  If C > 1 Then Find = .Item(1) Else Chek Find, "заменяемый"
  If C > 2 Then Repl = .Item(2) Else Chek Repl, "новый"
End With : Dir = CreateObject("WScript.Shell").CurrentDirectory & "\"
On Error Resume Next
With CreateObject("Scripting.FileSystemObject") 
  For Each F in Split(.GetFile(List).OpenAsTextStream(1, -1).ReadAll, vbNewLine)
    If F <> "" Then
      If .FolderExists(F) Then
        Set FF = .GetFolder(F)
        If Find <> "" And InStr(FF.Name, Find) Then
          NewName = Replace(FF.Name, Find, Repl) : NewF = Dir & NewName
          If .FolderExists(NewF) Then .DeleteFolder NewF
        End If
      ElseIf .FileExists(F) Then
        BN = .GetBaseName(F)
        If Find <> "" And InStr(BN, Find) Then
          Set FF = .GetFile(F)
          NewName = Replace(BN, Find, Repl) & "." & .GetExtensionName(F)
          NewF = Dir & NewName : If .FileExists(NewF) Then .DeleteFile NewF
        End If
      End If : FF.Name = NewName
    End If
  Next : Set FF = Nothing
End With : CreateObject("WScript.Shell").SendKeys "^R"

Sub Chek(Text, Word)
  Text = InputBox(String(5, vbnewline) & "Введите " & Word & " текст:", Space(10) & _
  "Замена имён выделенных файлов и папок", 3) : If Len(Text) = 0 Then WScript.Quit
  If Trim(Text) = "*" Then Text = ""
End Sub

Добавлено: Пт апр 12, 2013 22:23
Koter
то sa

Ну, так можно было бы, но надо же пути сохранить... Это же простой пример. А их там 79тыс. файлов.... и это только на одном из логических дисков в разных каталогах и подкаталогах.

Это у меня произошло после попадания вируса, закодировались все файлы с расширением rar, doc,docx,xml,xls,xlsx,dbf..... и прочие несущие личною и прочую информацию файлы фото, музыка, текст, базы, отчетность бух...

Спасибо ДрВебовцам, помогли с лекарством, И СПАСИБО - ГУРУ! Flasher -у!

Добавлено: Сб апр 13, 2013 01:18
sa
Если папок много, то перед запуском группового переименования стоит нажать Ctrl+B (или Ctrl+Shift+B). Чтобы не возиться с папками TEMP, можно добавить к переименовываемым файлам (выбранным по *.decrypted01.*) новое расширение, скажем YYYY, то есть в поле имя оставить [N], в поле расширения ввести [E].YYYY, в поле “Найти:” .decrypted01, в поле “Заменить на:” <Пусто>. Затем поиском найти все файлы *.YYYY, вывести их на панель и по Shift+F6 переименовать в *, заменив существующие.

To sa

Добавлено: Пн апр 15, 2013 00:37
Koter
НЕ Рабртает...

Добавлено: Пн апр 15, 2013 01:18
Flasher
Koter
Чтобы мой скрипт работал с результатами поиска или режимом без подкаталогов, мне в нём нужно внести лёгкую правку. Умысел работать только в активном каталоге заключался в возможности отслеживания изменений в нём, чтобы не промахнуться с выбором нужных файлов. Если это не особо нужно, то легко исправлю.

Добавлено: Пн апр 15, 2013 20:46
RuMaS
Уважаемый Flasher,
Если бы Вы сделали такой скрипт, который находил бы файлы на локальных дисках во всех каталогах и подкаталогах по маске (например, "А") и заменял в имени файла "А" на "B", но с таким расчётом, что файл с "В" уже существует и его надо заменить.

По аналогии с запросом Koter, но на всех дисках (папках).

Добавлено: Вт апр 16, 2013 00:12
Flasher
RuMaS писал(а):на всех дисках
И на съёмных тоже?

Добавлено: Ср апр 17, 2013 13:48
RuMaS
Flasher писал(а):
RuMaS писал(а):на всех дисках
И на съёмных тоже?
Есть карман, не знаю - он считается съемным?
(или, как вариант, чтоб можно было выбрать диск, для которого провести данную операцию... или текущий?)

Добавлено: Вс апр 21, 2013 00:56
Flasher
RuMaS писал(а):Есть карман, не знаю - он считается съемным?
Конечно (USB/eSATA).
>>

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

'=============================================================================
' Замена в базовых именах файлов структуры активного диска или всех дисков
' с удалением имеющихся файлов с аналогичными присвоенным именами

' Условие: путь запуска - пустой

' Параметры:
' 1) <активный диск / все диски: 1/2>
' 2) "<искомая строка>" (если нет, ввод в окне)
' 3) "<новая строка>" (если нет, ввод в окне - * в качестве пустой строки)

' Автор: Flasher ©
'=============================================================================

With WScript.Arguments
  C = .Count
  If C = 0 Then MsgBox "Не задан первый параметр!", 48 : WScript.Quit : End If
  If C > 1 Then Search = .Item(1) Else Msg Search, "заменяемый"
  Disks = .Item(0) : If C > 2 Then NewStr = .Item(2) Else Msg NewStr, "новый"
End With

Set FSO = CreateObject("Scripting.FileSystemObject")
Dim WSH : Set WSH = CreateObject("WScript.Shell")
If Disks = 1 Then
  Drive = FSO.GetDriveName(WSH.CurrentDirectory) & ""
  ForDrive Drive, Search, NewStr
ElseIf Disks = 2 Then
  For Each D in FSO.Drives : ForDrive D, Search, NewStr : Next
End If : WSH.SendKeys "^R" : WSH.Popup "Файлы переименованы!", 2, "    Результат", 64 
Set WSH = Nothing : Set FSO = Nothing : WScript.Quit

Sub Msg(Text, Word)
  Text = InputBox(String(5, vbnewline) & "Введите " & Word & " текст:", Space(10) & _
  "Замена имён файлов и папок", 3) : If Len(Text) = 0 Then WScript.Quit
  If Trim(Text) = "*" Then Text = ""
End Sub

Sub ForDrive(Drv, Find, Repl)
  DT = FSO.GetDrive(Drv).DriveType : Set DFiles = FSO.GetFolder(Drv).Files
  If DT > 0 And DT < 4 Then
    If DFiles.Count > 0 Then ForFile DFiles, Find, Repl, Drv
    ForFolder Drv, Find, Repl
  End If
End Sub

Sub ForFolder(Fold, Find, Repl)
  Set SubF  = FSO.GetFolder(Fold).SubFolders
  If SubF.Count > 0 Then
    For Each Folder in SubF
      ForFolder Folder, Find, Repl
      Set FF = Folder.Files
      ForFIle FF, Find, Repl, Folder & ""
    Next
  End If
End Sub

Sub ForFile(DFil, Find, Repl, Dir)
  On Error Resume Next
  For Each File in DFil
    BN = FSO.GetBaseName(File)
    If Find <> "" And InStr(BN, Find) Then
      NewName = Replace(BN, Find, Repl) & "." & FSO.GetExtensionName(File)
      NewF = Dir & NewName : If FSO.FileExists(NewF) Then FSO.DeleteFile NewF
      File.Name = NewName
    End If
  Next
End Sub

Групповое переименование файлов внутри помеченных папок

Добавлено: Пн апр 29, 2013 20:53
visit120
Очень занадобилась такая штука:
1. Имеется исходная папка (подобие каталога).
2. Внутри - находятся подпапки и файлы (и то и другое одновременно).
3. Внутри подпапок, в свою очередь находятся подпапки и файлы (этакое дерево...).
4. Помечаются необходимые папки и файлы (одновременно и то и другое) на каком либо уровне вложения.

Задача:
1. Переименовать все файлы, содержащиеся в помеченных подпапках, и далее на всех уровнях вложения.
2. Имена помеченных и вложенных подпапок - не переименовывать.
3. Переименовать, одновременно с содержимым подпапок, помеченные файлы на текущем уровне вложения.
4. Переименование производится транслитом.
5. Переименование должно производиться "в один присест" по клавише, либо по щелчку мышью.

Пробовал использовать маску для имени в групповом переименовании: , но она переименовывает и файлы (то, что нужно) и папки (а это - нельзя). А содержимое папок - остается неизменным.

Сломал уже всю голову, при поиске по форуму - ничего похожего не нашел (либо список вложенных файлов - либо переименование, но на одном уровне вложения).

Подскажите, хотя бы способ, каким можно эту задачу выполнить.

Добавлено: Пн апр 29, 2013 22:22
sa
visit120
А если после выделения нажать Ctrl+Shift+B и затем, выделив все файлы, выполнять групповое переименование?

Добавлено: Чт май 02, 2013 04:02
visit120
sa писал(а):
А если после выделения нажать Ctrl+Shift+B и затем, выделив все файлы, выполнять групповое переименование?
Спасибо!!! Работает чудесно.
Вот только как быть с п.5 - нужно как-то навесить эту последовательность действий на какую-нибудь кнопку. Как вообще это можно сделать (хотя бы способ) ???

Добавлено: Чт май 02, 2013 09:04
sa
visit120
Можно с помощью утилиты TCFS2 (отсюда). Предварительно надо создать команду em_MRT_Translit (на базе MULTIRENAME <имя шаблона>).
Кнопка примерно такая:

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

TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe
/ef "tcm(2046, 1) tcm(3302, 1) delay(500) tem(`em_MRT_Translit`, 1) delay(500) send(`{ENTER}`, findwnd(`TMultiRename`)) delay(500) send(`{ESC}`, findwnd(`TMultiRename`)) tcm(540, 1)"
wcmicons.dll,70
В выделенном мультипереименовать все файлы пользовательской командой em_MRT_Translit


-1

Добавлено: Чт май 02, 2013 12:34
visit120
для sa:
Можно с помощью утилиты TCFS2 (отсюда).
Попробовал понавесить все на кнопку (примерно тем же способом). Вроде - все работает.
Большущее Спасибо за помощь!!!