Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
1 / 1 / 0
Регистрация: 24.12.2017
Сообщений: 108

Рандомное переименование файлов txt без повторов

08.03.2018, 13:46. Показов 2146. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Помогите с задачей.

В одной папке с книгой - есть txt файлы, с названиями 1.txt, 2.txt, 3.txt и т.д.
Как нажатием на кнопку макроса - поменять названия файлов случайным образом - используя те же самые числовые данные?

В итоге - получится что файлы вроде бы те же самые... но их названия ПЕРЕТАСОВАНЫ. Например файл который при запуске макроса - назывался 2.txt - после срабатывания - будет называться 5.txt или 11.txt (в названии файлов - всегда только числа).

Названия файлов - могут быть только те, что существуют в папке на момент запуска скрипта. То есть - если в папке с книгой всего 11 текстовых файлов, то при переименовании - не может быть файла с названием 14 или 15.
Вложения
Тип файла: xls Книга.xls (29.5 Кб, 8 просмотров)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.03.2018, 13:46
Ответы с готовыми решениями:

Умное переименование массива txt-файлов
Приветствую! Несколько дней не могу сделать простое для профессионального батникописца и сложное для новичка задание. Опишу задачу: ...

Переименование и сортировка файлов в имена, взятые из txt-файла - PowerShell
Всем привет! Хочу сделать скрипт для автоматической сортировке видео (.mp4) и фото с дрона(.jpg) (Phantom 4). На флешке йдет сначало видео...

Вывести расширения файлов в текущем каталоге (без повторов)
Помогите написать батник. Нужно вывести расширения файлов в текущем каталоге. Если есть несколько файлов в одинаковым расширением , то...

13
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
08.03.2018, 14:05
К чему такое извращение ?
Опять преподователи (изверги) загадки придумывают ))
0
1 / 1 / 0
Регистрация: 24.12.2017
Сообщений: 108
08.03.2018, 14:13  [ТС]
fever brain, типа того
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
08.03.2018, 15:01
Для того чтобы переименовать файлы из группы в одной директории
нужно создать коллекцию этих файлов
отобрать только .txt

Вот собственно както так
визуально это в папке будет незаметно так как обычно файлы идут в произвольном порядке
но содержание будет принадлежать к разным файлам при каждом обращении к макросу

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Sub Перетасовать_Названия_файлов()
    Dim i&, j&, v, c As New Collection
 
    With CreateObject("scripting.filesystemobject")
        Randomize Timer
        For Each v In .getfolder(ThisWorkbook.Path).Files
            If LCase(Right$(v, 4)) = ".txt" Then c.Add v.Path
        Next
        
        For i = 1 To c.Count
            .MoveFile c(i), ThisWorkbook.Path & "\" & i & ".txt"
        Next
    
        For Each v In .getfolder(ThisWorkbook.Path).Files
            If LCase(Right$(v, 4)) = ".txt" Then
                j = Fix(Rnd * c.Count) + 1
                .MoveFile v.Path, c(j)
                c.Remove (j)
            End If
        Next
    End With
 
End Sub
0
1 / 1 / 0
Регистрация: 24.12.2017
Сообщений: 108
08.03.2018, 15:12  [ТС]
fever brain, почему-то не работает.

Выдает ошибку:
"Run-time error '58' File already exist"
Вложения
Тип файла: rar 1.rar (14.4 Кб, 4 просмотров)
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
08.03.2018, 15:15
Лучший ответ Сообщение было отмечено ВасилисаЛкн как решение

Решение

А так
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Sub Перетасовать_Названия_файлов()
    Dim i&, j&, v, c As New Collection
    On Error Resume Next
    With CreateObject("scripting.filesystemobject")
        Randomize Timer
        For Each v In .getfolder(ThisWorkbook.Path).Files
            If LCase(Right$(v, 4)) = ".txt" Then c.Add v.Path
        Next
        
        For i = 1 To c.Count
            .MoveFile c(i), ThisWorkbook.Path & "\" & i * 1000 & ".txt"
        Next
    
        For Each v In .getfolder(ThisWorkbook.Path).Files
            If LCase(Right$(v, 4)) = ".txt" Then
                j = Fix(Rnd * c.Count) + 1
                .MoveFile v.Path, c(j)
                c.Remove (j)
            End If
        Next
    End With
 
End Sub
1
1 / 1 / 0
Регистрация: 24.12.2017
Сообщений: 108
08.03.2018, 15:19  [ТС]
fever brain, теперь все идеально.
Спасибо большое.
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
08.03.2018, 15:20
Теперь ошибки не возникнет (если только файлы не заблокированны)
Результат будет незаметным в папке (на рабочем столе и тп) в том месте где запускалась книга excel
Вообщето там-же должны распологаться и перетасовываемые имена файлов

Но содержание (контент) будет всегда меняться
к примеру файлы
123.txt >контент = зравствую вася !
234.txt >контент = хочу жрать !
345.txt >контент = спартак рулит !

измениться может так:

123.txt >контент = хочу жрать !
234.txt >контент = зравствую вася !
345.txt >контент = спартак рулит !
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
08.03.2018, 15:29
ВасилисаЛкн, названия файлов любые, не обязательно числа
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Sub bb()
Dim i&, f$
  Application.ScreenUpdating = False
  ChDir ThisWorkbook.Path
  f = Dir("*.txt")
  While f <> ""
    i = i + 1
    Cells(i, 1).Resize(, 2) = f
    f = Dir
  Wend
  With Range("B1:C" & i)
    .Columns(2).Formula = "=RAND()"
    .Sort Range("C1"), Header:=xlNo
  End With
  For i = 1 To i
    Name Cells(i, 1) As "~" & Cells(i, 2)
  Next
  For i = 1 To i - 1
    Name "~" & Cells(i, 2) As Cells(i, 2)
  Next
  Range("A:C").ClearContents
  Application.ScreenUpdating = True
End Sub
2
1 / 1 / 0
Регистрация: 24.12.2017
Сообщений: 108
08.03.2018, 15:34  [ТС]
Казанский, у вас выдает ошибку :
Run-time error '1004' Method 'Range' of object '_Global' failed
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
08.03.2018, 15:34
Интересная реализация, не знал что ключевой keyword можно использовать здесь ))
Цитата Сообщение от Казанский Посмотреть сообщение
Cells(i, 2) As Cells(i, 2
0
1 / 1 / 0
Регистрация: 24.12.2017
Сообщений: 108
08.03.2018, 15:38  [ТС]
Казанский, выдает ошибку.
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
08.03.2018, 16:17
Цитата Сообщение от ВасилисаЛкн Посмотреть сообщение
выдает ошибку :
Run-time error '1004' Method 'Range' of object '_Global' failed
На какой строке? Чему равно i при этом?
У меня работает, иначе бы не выложил.
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
08.03.2018, 16:37
Цитата Сообщение от Казанский Посмотреть сообщение
У меня работает, иначе бы не выложил.
ошибка 1004, что она может означать?
вот у меня тоже могли возникнуть ошибки из за совпадения имен
а они были, на это указал ВасилисаЛкн в посте #5
я например не знаю (и знать не хочу) как у него файлы расположенны
вероятно были расположенны 1, 2, 3 и тд

поэтому для перетасовки сделал такой вариант
1) групповое переименование в произвольном порядке подставив 1000, 1001, 1002
2) затем выборочное переименование из коллекции имен ранее запомненных

Добавлено через 4 минуты
Поставил игнорирование ошибок
не просто так, а тоже смотрел и проверял
при совпадении имен (а также блокировки) эта ошибка проигнорируется
но задача то выполнится!, перетасовка будет сделана
система просто не даст переименовать уже используемое имя

Кстати эту задачу можно было сделать просто перебором имен с условием отсутствия ошибок
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.03.2018, 16:37
Помогаю со студенческими работами здесь

Без txt файлов
Здравствуйте, подскажите как сделать все то же самое но без использования txt файлов Или может это все можно как то проще написать? ...

Создать новый файл qa.txt, который будет содержать строки с вопросами и ответами из файлов q.txt и a.txt.
В текстовом редакторе создать два текстовых файла q.txt и a.txt, которые соответственно содержат вопросы и ответы на их. Создать новый файл...

Удаление повторов из большого txt-файла
Привет! Есть большой 3гб файл file.txt в нем такие строки (и могут быть повторения) нужно повторения удалить 1212212121 ...

Переписать все числа из файлов 1.txt и 2.txt в файл 3.txt
Здравствуйте! Нужна помощь. Есть два текстовых файла 1.txt и 2.txt в них есть числа. реализовать консольное приложение которое...

Брать рандомное слово из txt файла
Здравствуйте, помогите) есть такой скрипт: @echo off ( for %%i in ( &quot;Текст: %random%&quot; ) do ( set string=%%~i for /f...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru