Переименование файлов

Программирование на Visual Basic for Applications
Tuco
Постоялец
Постоялец
 
Сообщения: 508
Зарегистрирован: 18.06.2003 (Ср) 16:37
Откуда: Подмосковье

Переименование файлов

Сообщение Tuco » 18.11.2003 (Вт) 14:36

Всем здравствуйте!
Возникла проблема такого рода: есть куча файлов очень большого объёма, у них дурацкие имена, с пробелами (ну и т.д.), и вот есть желание эти пробелы заменить. Как это сделать? Вручную я пытался, но времени теряется очень много.
"There's more than one way to do it!"

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 18.11.2003 (Вт) 14:42

Все очень расплывчато, откуда ты файлы берешь и где переименовываешь, какие файлы?

Если Excel, тебе понадобится метод книги saveas, и еще оператор kill для стирания файла.

Tuco
Постоялец
Постоялец
 
Сообщения: 508
Зарегистрирован: 18.06.2003 (Ср) 16:37
Откуда: Подмосковье

Сообщение Tuco » 18.11.2003 (Вт) 14:55

Файлы мр3-шные. Каждый больше 5 мегабайт, потому ручная переименовка занимает кучу времени. Вот и хочу просто поменять пробелы в названиях на символ нижнего подчёркивания...
"There's more than one way to do it!"

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 18.11.2003 (Вт) 15:01

А какое отношение имеет размер файла к длительности процедуры переименования?

И чего ты всё же хочешь? Средствами операционной системы переименовывать, тулзу какую ищешь или на VB код слабать не можешь?

Tuco
Постоялец
Постоялец
 
Сообщения: 508
Зарегистрирован: 18.06.2003 (Ср) 16:37
Откуда: Подмосковье

Сообщение Tuco » 18.11.2003 (Вт) 15:34

Хочу сделать код на VBA. Я просто ни с чем больше дела не имел никогда...
А размер влияет на скорость очень сильно. Переименование занимает кучу времени. Если файл маленький, то переименовывается мгновенно, а эти - нет...
"There's more than one way to do it!"

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 18.11.2003 (Вт) 15:47

так и не ответил какого типа файлы нужно переименовывать :evil: .

Вот таким образом можно перебрать имена файлов в каталоге:

namef = dir("Путь к файлам и маска")

while namef <>""
.
.
'новое имя файла
namef = dir
wend

Tuco
Постоялец
Постоялец
 
Сообщения: 508
Зарегистрирован: 18.06.2003 (Ср) 16:37
Откуда: Подмосковье

Сообщение Tuco » 18.11.2003 (Вт) 16:22

я не совсем понимаю, что подразумевается под типом файла. и что такое маска? я ведь не профессионал, а совсем самоучка...
"There's more than one way to do it!"

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 18.11.2003 (Вт) 17:03

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

Public Sub ReplaceFileName(ByVal Path As String, ByVal Mask As String, ByVal Find As String, ByVal Replace As String)
   
    Const DisabledChars As String = "\/:*?""<>|"
   
    Dim FileName As String
    Dim FileNameNew As String
    Dim i As Long
   
    If (Len(Find) = 0) Then Exit Sub
    For i = 1 To Len(Replace)
        If (InStr(1, DisabledChars, Mid$(Replace, i, 1), vbTextCompare)) Then 'bad symbole
            Mid$(Replace, i, 1) = "_" 'good symbole by default
            'or
            'Exit Sub
        End If
    Next
   
    Path = VBA.Replace(Path, "/", "\")
    If (Right$(Path, 1) <> "\") Then Path = Path & "\"
   
    FileName = Dir$(Path & Mask)
    Do While (Len(FileName))
        FileNameNew = VBA.Replace(FileName, Find, Replace, , , vbTextCompare)
        If (StrComp(FileName, FileNameNew, vbTextCompare)) Then
            FileCopy Path & FileName, Path & FileNameNew
            Kill Path & FileName
            Debug.Print "Renamed: '" & FileName & "' to '" & FileNameNew & "' in Folder '" & Path & "'"
        End If
        FileName = Dir$()
    Loop
   
End Sub

Public Function test()
    Call ReplaceFileName("d:\1", "*.*", " ", "_")
    Call ReplaceFileName("d:\1", "*.*", "_", "?_")
    Call ReplaceFileName("d:\1", "*.*", "_", "")
End Function


Immediate:
Код: Выделить всё
test
Renamed: 'test 2 - txt .ini' to 'test_2_-_txt_.ini' in Folder 'd:\1\'
Renamed: 'test_2_-_txt_.ini' to 'test__2__-__txt__.ini' in Folder 'd:\1\'
Renamed: 'test__2__-__txt__.ini' to 'test2-txt.ini' in Folder 'd:\1\'

Tuco
Постоялец
Постоялец
 
Сообщения: 508
Зарегистрирован: 18.06.2003 (Ср) 16:37
Откуда: Подмосковье

Сообщение Tuco » 19.11.2003 (Ср) 10:41

Спасибо!
А можно вкратце объяснить, что мне с этим всем делать? я смотрю на это и не нахожу, куда мне вставить название папки с файлами, которые нужно обработать...
"There's more than one way to do it!"

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 19.11.2003 (Ср) 13:20

Собственно, рабочая процедура ReplaceFileName(). В функции test() приводится пример её вызова.

Код: Выделить всё
Call ReplaceFileName("d:\1", "*.*", " ", "_")

, где параметр #
1. путь к папке
2. маска (*.* - любые файлы, *.mp3 - только с расширением mp3 и т.д.)
3. что искать
4. на что заменять

В окне Immediate отображается результат работы. Это для отладки и рояля не играет.

Tuco
Постоялец
Постоялец
 
Сообщения: 508
Зарегистрирован: 18.06.2003 (Ср) 16:37
Откуда: Подмосковье

Сообщение Tuco » 19.11.2003 (Ср) 14:04

А-а-а-а-агромаднейшее спасибо, прога работает, как нужно, просто супер!!!!!!!! Век помнить буду!!!!!! :D
"There's more than one way to do it!"


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 60

    TopList