Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 6

Копирование и переименование папок, по правилам

23.01.2010, 13:31. Показов 4243. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть папка Image в ней есть несколько папок с числовыми названиями,в тех папках еще есть папки,
пример
Image
папка 4567890, в ней:
-------------папка 789079
-------------папка 89097765
56789766
---------------456788999
---------------678999999
нужно
в другую папку image скопировать все эти папки, толька имена должны бить ST000001,ST000002,ST000003 и т.д, а для вложеных папок SE000001,SE000002,SE000003 и т.д., количество папок может изменятся, есть условие длина название должна быть только 8 символов
а нада так
пример
Image
ST000001
-----------SE000001
-----------SE000002
ST000002
------------SE000001
------------SE000002

подскажите как на примере мне это зделать, а самое главное я не могу понять как по такому правилу переименовать
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.01.2010, 13:31
Ответы с готовыми решениями:

Массовое переименование папок
всем привет. возможно ли сделать такой bat который будет по указанному пути находить папки с указанным именем и переименовывать их всех...

Гиперссылки и переименование папок
Внезапно возникла задача. Есть довольно объемный текст. Много гиперссылок на исходные документы. Все документы лежат в одной папке. Теперь...

Переименование множества папок
Здравствуйте, знатоки!) Такая проблема, есть 200 папок с названиями от 1 до 200 (1 2 3 4 5 ... 200) Думаю все поняли, что я имею...

6
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 6
24.01.2010, 13:41  [ТС]
на этом форуме что некто не знает как это сделать
0
1090 / 588 / 121
Регистрация: 11.11.2008
Сообщений: 1,544
25.01.2010, 07:02
задачка проста, думаю людям просто лень расписывать...
а реальноо ли есть смысл писать это самому?

например в Total Commander есть инструмент Multi-Rename Tool
выделяешь все папки, которые хочешь переименовать (без вложений правда)
жмешь Ctrl-M и там уже делаешь с именами все что душе угодно)

если не устраивает, то не поленюсь, распишу как это сделать в билдере)
1
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 6
25.01.2010, 22:40  [ТС]
а реальноо ли есть смысл писать это самому?

Вся проблема что я не пишу переименовыватель файлов, или файловый браузер, и у меня выхода нет.Раскажу поподробнее... У меня есть сервер который принимает снимки и пакует их по папках, каждый снимок имеет 3 значения:1)№иследования,2)№серии,3)№ снимка, соответствено в такой послеовательости создаются папки, но они имеют уникальные числовые названия вида 4565456535.94467.24567890.129900.2345675 67, файлы имеют схожые название, мне эти иследованя нада записывать на диск, по стандарту и папки и файлы должны иметь названия 8 символов.Например 00000001,00000002 и т.д.

Вот и прошу помочь решить вроде бы легкую но для меня оказуется тяжелую задачу.
Кароче иерархия такая: есть папка №иследования с названием 1.2.392.200036.9116.2.2.2.1762565144.126 1360541.28503 в ней лежит 2 папки №серии с названием 1.2.392.200036.9116.2.2.2.1762565144.126 1360579.778391 и 1.2.392.200036.9116.2.2.2.1762565144.126 1360651.78134 а в каждой с папок лежит по 30-50 снимков с названиями 1.2.392.200036.9116.2.2.2.1762565144.126 1360651.114527 и.т.д
Нужно чтоб эти папки копировались и переименовывались в вид №иследования с названием ST000001 в ней должно лежать 2 папки №серии с названием SE000001,SE000002 а в каждой с папок лежить по 30-50 снимков с названиями IM000001,IM000002,IM000003,IM000004,IM00 0005


Это только пример, иследований может быть десятки тысяч
0
1090 / 588 / 121
Регистрация: 11.11.2008
Сообщений: 1,544
26.01.2010, 13:56
несколько замечаний и вопросов:
ограничение в 8 символов как-то наивно в наши времена звучит)
что мешает использовать при записи файловую систему ISO 9660 + Juliet с длинной 31 символ либо вообще разрешить макс. длину более 64 символа?
либо использовать ISO 9660:1999, где 207 макс. символов.
опять же если переименование принципиально, то при небольшой сноровке сделать это в Total Cammander-е не займет много времени)
И если все-таки все-таки это как-то не устраивает, то вопрос: обязательно ли копировать все этип папки куда-то? почему бы просто не переименовать их на месте?

Добавлено через 6 часов 17 минут
"иследований может быть десятки тысяч" как-то упустил)
ну тогда стоит писать.
если имеем всего 3 уровня (2 уровня диркекторий и 1 файлов), то думаю можно обойтись без рекурсии, а тупо кинуть на форму 2 компонента DirectoryListBox и один FileListBox. ну а дальше 3 цикла с перименовываниям)
0
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 6
26.01.2010, 23:44  [ТС]
ограничение в 8 символов как-то наивно в наши времена звучит)

извиняюсь не уточнил мешает не стандарт записи а стандарт DICOM, потом эти файлы пропускаются через эщо одну прогу которая создает спецефическую базу данных, в которой есть ограничение 8 символов

почему бы просто не переименовать их на месте?

не получится данные должны быть в оригинале, а те что скопируются после записи удалятся

если имеем всего 3 уровня (2 уровня диркекторий и 1 файлов), то думаю можно обойтись без рекурсии, а тупо кинуть на форму 2 компонента DirectoryListBox и один FileListBox. ну а дальше 3 цикла с перименовываниям)

думаю как то по колгоспному и не быстро, мне скорость очень важна а имено когда файлов нада переименовать свыше тисячи для одного диска, мне предлагали такое но ненаю как дописать
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
WCHAR secondChar[] = { 'T', 'E' };
 
// curDirName путь к текущей папке для копирования
// dirToCopy в какой папке создавать новую
// level - уровень вложенности
 
void CopyDirectory(LPTSTR curDirName, LPTSTR dirToCopy, int level)
{
   int dirCount = 1;
 
   // цикл по папкам в curDirName
      // создаем в dirToCopy папку с именем 'S' + secondChar[level] + dirCount
      // вызываем найденной папки функцию CopyDirectory(<путь найденной папки>, <путь к созданной папке>, level + 1);
}
 
// пример первого вызова функции
// CopyDirectory(_T"D:\\Image", _T"D:\\MyNewImage", 0);
0
1090 / 588 / 121
Регистрация: 11.11.2008
Сообщений: 1,544
27.01.2010, 07:53
ок. с рекурсией так с рекурсией.
пробуй:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
TStringList *sl;
 
AnsiString sixchar(int n)
{
int l;
AnsiString outstr;
AnsiString nstr=IntToStr(n);
AnsiString nulls="00000000";
l=nstr.Length();
outstr=nulls.SubString(1,8-l)+nstr;
return outstr;
}
 
void CopyDirectory(AnsiString DirFrom, AnsiString DirTo, int level)
{
int dirCount = 1,fileCount = 1;
AnsiString newdir, newfile;
TSearchRec sr;
if (FindFirst(DirFrom+"\\*.*", faAnyFile, sr) == 0)
{
 do
 {
 if (sr.Attr & faDirectory)  // если нашли папку
  {
  if (sr.Name!=".")
  if (sr.Name!="..")
   {
   newdir=DirTo+"\\"+sl->Strings[level]+sixchar(dirCount);
   CreateDir(newdir);
   CopyDirectory(DirFrom+"\\"+sr.Name, newdir, level+1);// Рекурсивный вызов
   dirCount++;
   }
  }
  else // если нашли файл
   {
   newfile=DirTo+"\\"+sl->Strings[level]+sixchar(fileCount)/*+".jpg"*/;
   CopyFile((DirFrom+"\\"+sr.Name).c_str(), newfile.c_str(), true);
   fileCount++;
   }
 }
 while (FindNext(sr) == 0);
 FindClose(sr);
}
return;
}
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
sl=new (TStringList);
sl->Add("ST");
sl->Add("SE");
sl->Add("IM");
CopyDirectory("C:\\Image", "C:\\ImageNew", 0);
delete sl;
return;
}
Добавлено через 10 минут
я пробовал на небольшом количестве папок и файлов,
а тебе возможно придется вставить где-нибудь в коде строку
C++
1
Application->ProcessMessage();
для разгрузки системы.

и еще конечно для удобства можно присобачить ProgressBar
но при данном подходе это не так уж и просто замутить)

ну и sixchar(); подозреваю можно дико упростить, но не суть важно)
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.01.2010, 07:53
Помогаю со студенческими работами здесь

Групповое переименование папок в каталоге
Ребят, подскажите пожалуйста. Есть папки в каталоге, нужно поменять у всех название. Есть таблица соответствия, в столбце А - старое...

Переименование папок в архивах winrar
Добрый день. Помогите пожалуйста с bat файлом для winrar. Нужно переименовать подкаталоги в архиве. Есть много архивов. ...

Переименование папок/файлов по списку
Добрый день уважаемые гуру VBA! Нашел старый макрос, которым когда-то пользовался на работе и переименовывал папки по списку, теперь...

Переименование папок программой невозможно?
Писал пару лет назад отличную программу на BAT, которая может создавать невидимый файл. Устанавливает иконку определенную и называет его...

Переименование папок, используя файл с кодами
Здравствуйте, знатоки! В продолжение предыдущей темы. Я с батником знаком совершенно недавно, а точнее вчера о нем узнал. Если...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru