Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Ветеран


Contributor


Сообщения: 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