Назначить рандомные номера файлам

Тема в разделе "Пакетные файлы CMD, BAT", создана пользователем Kиpилл, 13 дек 2014.

  1. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.225
    Симпатии:
    4.979
    Привет!
    Можете помочь с проблемкой?
    Есть список файлов,нужно взять количество этих файлов и каждому в случайном порядке присвоить номер в диапазоне чисел из количества файлов.
    И маленькая хотелка: если в имени файла уже присутствуют цифры их надо обрезать,это не более трех цифр.
    Спасибо!
     
  2. glax24
    Оффлайн

    glax24 Разработчик

    Сообщения:
    2.000
    Симпатии:
    1.450
    Koza Nozdri, зачем в случайном, по порядку не подойдет?
     
  3. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.225
    Симпатии:
    4.979
    Есть некий аппарат,который не умеет воспроизводить музыку в разнобой,но при этом читает файлы по порядку алфавита.
    А скрипт эту задачу исправит.
     
  4. regist
    Оффлайн

    regist гоняюсь за туманом Ассоциация VN/VIP VIP Разработчик

    Сообщения:
    11.382
    Симпатии:
    5.268
  5. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.493
    Симпатии:
    4.309
    Вот скрипт VBS.
    Автор: KoGG.

    Описание:
    Для целей переименовавания музыкальных файлов для воспроизведения в случайном порядке.
    Данный скрипт переименовывает все файлы в выбранной папке, присоединяя слева к старому имени файла случайный порядковый номер. Если у файла в имени был слева номер, то старый номер удаляется.
    Папка выбирается через файловый диалог Word.

    Код (vb.net):

    Dim oFSO, oFolder, oFile
    Dim i, j, MyPath, FCnt, Min, PoTemp, sTmp, sL, sR, Usl
    With CreateObject("Word.Application")
        .Visible = True
        With .FileDialog(4)
            .ButtonName = "Выбрать": .Title = Title: .InitialFileName = "C:\"
            Usl = (.Show = -1)
            If Usl Then
                MyPath = .SelectedItems(1)
            End If
        End With
        .Quit
    End With
    If Usl Then
        Set oFSO = CreateObject("Scripting.FileSystemObject")
        Set oFolder = oFSO.GetFolder(MyPath)
        MyPath = MyPath & "\"
        FCnt = oFolder.Files.Count
        ReDim OldNames(FCnt), NewNames(FCnt), Poryadok(FCnt), NewPrefix(FCnt)
        i = 0
        For Each oFile In oFolder.Files
            i = i + 1
            OldNames(i) = oFile.Name
            If Len(OldNames(i)) > 5 Then
                sTmp = Left(OldNames(i), 5)
                sR = Right(OldNames(i), Len(OldNames(i)) - 5)
                Usl = False
                sL = ""
                For j = 1 To 5
                    PoTemp = Mid(sTmp, j, 1)
                    Select Case PoTemp
                         Case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"
                            If j = 2 Then
                                Usl = True
                            End If
                         Case "_", " "
                            If Not Usl Then
                                sL = sL & PoTemp
                            End If
                         Case Else
                            sL = sL & PoTemp
                    End Select
                Next
                NewNames(i) = sL & sR
            Else
                NewNames(i) = OldNames(i)
            End If
            Poryadok(i) = Rnd
            sTmp = Trim(CStr(i))
            j = Len(sTmp)
            If j < 4 Then
               sTmp = String(4 - j, "0") & sTmp
            End If
            NewPrefix(i) = sTmp & "_"
        Next
        Randomize Timer
        For i = 1 To FCnt
            Min = Poryadok(i)
            For j = i + 1 To FCnt
                If Min > Poryadok(j) Then
                    PoTemp = Poryadok(i)
                    Poryadok(i) = Poryadok(j)
                    Poryadok(j) = PoTemp
                    sTmp = NewPrefix(i)
                    NewPrefix(i) = NewPrefix(j)
                    NewPrefix(j) = sTmp
                End If
            Next
        Next
        For i = 1 To FCnt
            NewNames(i) = MyPath & NewPrefix(i) & NewNames(i)
            oFSO.GetFile(MyPath & OldNames(i)).Move NewNames(i)
        Next
        Set File = Nothing
        Set oFolder = Nothing
        Set oFSO = Nothing
    End If
     
     
  6. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.225
    Симпатии:
    4.979
    Спасибо)
    Помогли.
     

Поделиться этой страницей