Ветеран

Сообщения: 2728
Благодарности: 1697
|
Профиль
|
Отправить PM
| Цитировать
wwtf, как я понял, Вы вводите xxx и yyy, а затем переименовываете файлы, содержащие в названии ххх, например, xxx111.jpg в yyy111.jpg. Или, например, траляляxxx111.jpg в траляляyyy111.jpg
Вот вариант решения. По максимуму использовал Ваш скрипт
Код: 
Extension=".jpg" 'Расширение файлов.
Set WshShell = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
Set BrowseDialogBox = CreateObject("Shell.Application")
Do
Set SelectedFolder = BrowseDialogBox.BrowseForFolder(0, "Выберите папку содержащую файлы.", &H1)
If InStr(1, TypeName(SelectedFolder), "Folder") = 0 Then Exit Do
FullPath = SelectedFolder.ParentFolder.ParseName(SelectedFolder.Title).Path
OldString = InputBox("Введите маску имени файла", "Rename Files")
If OldString = "" Then Exit Do
NewString = InputBox("Введите конечное имя файла", "Rename Files")
If NewString = "" Then Exit Do
OldString = LCase(OldString)
NewString = LCase(NewString)
Set RegMaska = New RegExp
RegMaska.Pattern = "^.*"+OldString+".*\" + Extension
RegMaska.IgnoreCase = True
Call AllFiles(FullPath)
Loop
' ---------------------------------------------------------------------------
Sub AllFiles(WDir)
Set Folds = FSO.GetFolder(WDir)
Set SubF = Folds.SubFolders
Set Files = Folds.Files
For Each jF In Files
If RegMaska.Test(jf) Then
jfOld = jf
jfNew = Replace(LCase(jf.Name), OldString, NewString)
Msg = ""
On Error Resume Next
jf.Name = jfNew
If Err.Number <> 0 Then
Msg = Msg + "При попытке переименовать файл" + vbCrLf + vbCrLf
Msg = Msg + jfOld + vbCrLf + vbCrLf
Msg = Msg + "в файл" + vbCrLf + vbCrLf
Msg = Msg + jfNew + vbCrLf + vbCrLf
Msg = Msg + "ошибка: " + Err.Description
Dummy = WshShell.Popup(Msg, 0, "Rename Files", 16)
Else
Msg = Msg + "Файл" + vbCrLf + vbCrLf
Msg = Msg + jfOld + vbCrLf + vbCrLf
Msg = Msg + "переименован в файл" + vbCrLf + vbCrLf
Msg = Msg + jfNew
Dummy = WshShell.Popup(Msg, 5, "Rename Files", 64)
End If
On Error GoTo 0
' MsgBox Msg
End If
Next
For Each Folder In SubF
Call AllFiles(WDir + "\" + Folder.Name)
Next
End Sub
|
-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.
Последний раз редактировалось megaloman, 26-04-2017 в 09:26.
Отправлено: 23:18, 25-04-2017
| #5
|