Войти

Показать полную графическую версию : Перенос файлов в Total Commander


Александр 555
26-03-2022, 13:18
Здравствуйте.Мне необходимо переместить файлы из 3-х разных папок по папкам,в которых будут собраны файлы с одинаковой частью имени.Файлы с разными именами,но начальная часть имени одинаковая.Названия папок также должны совпадать с этой частью имени.

DJ Mogarych
26-03-2022, 14:43
Необходим критерий этой "начальной части имени".

wasp14
26-03-2022, 16:32
ALT+Q - печатай имя, останутся только те, что совпадают. Дальше CTRL+A, F6 - переносит куда надо.

переместить файлы из 3-х разных папок »
А да, вначали жмакай CTRL+B - покажет в палени все файлы из подпапок. Дальше, то что выше описал ↑

Александр.Быков@vk
02-04-2022, 05:14
Этот способ мне не подходит.Объясню почему.Есть множество главных папок.В каждой главной папке находятся по 3 подпапки.В каждой из этих 3-х подпапок находятся файлы.К примеру:
1 подпапка:
файлы:
cgaxis_models_11_01_01
cgaxis_models_11_01_01_bump
cgaxis_models_11_01_01_reflect

cgaxis_models_11_02_01
cgaxis_models_11_02_01_bump
cgaxis_models_11_02_01_reflect
и т.д.

2 подпапка:
файлы:
cgaxis_models_11_01
cgaxis_models_11_02
и т.д.

3 подпапка:
файлы:
cgaxis_models_11_0101
cgaxis_models_11_0202
и т.д.

Эти файлы нужно собрать в подпапки с именами
cgaxis_models_11_01
cgaxis_models_11_02
и т.д.
Как автоматизировать этот процесс,так как главных папок много.

DJ Mogarych
02-04-2022, 08:16
Powershell

$folders = (dir "C:\temp\Корень" -directory).fullname

foreach ($folder in $folders) {
dir "$folder" -recurse -file |
group {$_.BaseName -replace '^(\D+_\D+_\d{2}_\d{2}).*','$1'} |% {
$newfolder = "$folder\$($_.Name)"
mkdir "$newfolder"
$_.group.fullname |mv -Destination "$newfolder"
}
# Удаление пустых каталогов
dir "$folder" -Directory |% {if (!(dir "$($_.FullName)")) {del "$($_.FullName)"}}
}

Александр.Быков@vk
02-04-2022, 11:30
Можно по шагам.Что мне с этим кодом делать?

DJ Mogarych
02-04-2022, 11:33
Вписать корневой путь (где находятся главные папки) в первую строку и запустить это в Powershell.

Кстати, вопрос:
Эти файлы нужно собрать в подпапки с именами
cgaxis_models_11_01
cgaxis_models_11_02 »
Эти подпапки должны находиться на том же уровне, что и "1 подпапка", "2 подпапка", "3 подпапка"?
Или они должны быть подпапками в подпапках?

Александр.Быков@vk
02-04-2022, 12:45
Вместо 1 подпапки,2-ой подпапки и 3-ей подпапки должны быть подпапки с именами cgaxis_models_11_01,cgaxis_models_11_02 и т.д.

Находится они должны в основной папке,а 1,2, и 3 подпапки удалить.

DJ Mogarych
02-04-2022, 13:38
Ну всё так и есть, должно работать.

Александр.Быков@vk
02-04-2022, 13:55
Мой корневой путь главной папки-G:\3 Д Макс\Модели\Пример
Так будет первая строчка?
$folders = (dir "G:\3 Д Макс\Модели\Пример" -directory).fullname
И еще вопрос.Powershell-это Windows Powershell?

DJ Mogarych
02-04-2022, 14:36
Нет, G:\3 Д Макс\Модели.

Windows Powershell »
Да.

Александр.Быков@vk
09-04-2022, 13:07
Спасибо вам.Все работает.Но некоторые папки не получается сделать.Там файлы такие.
1 подпапка:
файлы:
AM110_001_bump
AM110_001_color
AM110_001_normal
AM110_001_opacity

AM110_002_color

AM110_003_bump
AM110_003_bump_01
AM110_003_color
AM110_003_color_01
и т.д.

2 подпапка:
файлы:
AM110_001
AM110_002
AM110_003
и т.д.

3 подпапка:
файлы:
AM110_001
AM110_002
AM110_003
и т.д.

В результате образуются папки с именами
AM110_001
AM110_001_bump
AM110_001_color
AM110_001_normal
AM110_001_opacity
AM110_002
AM110_002_color
AM110_003
AM110_003_bump
AM110_003_bump_01
AM110_003_color
AM110_003_color_01

DJ Mogarych
09-04-2022, 14:48
Это другой паттерн имени, такого варианта не было ранее упомянуто, соответственно, он не был учтён.

Попробуйте в скрипте заменить

-replace '^(\D+_\D+_\d{2}_\d{2}).*','$1'

на

-replace '^(\D+\d+_\d+).*','$1'

Александр.Быков@vk
10-04-2022, 14:40
Я заменил,все получилось.Спасибо.

Александр.Быков@vk
03-05-2022, 07:38
Здравствуйте.Есть такой еще вопрос.Есть ярлыки с абсолютным путем.Их много.Как их заменить на ярлыки с относительным путем.Чтобы они работали при переносе на другой компьютер.

wasp14
03-05-2022, 20:25
НЯЗ, ярлык в винде, это отдельный объект и для работы с ним, ничего, никаких средств не предусмотрено.
Только вручную заменять путя. хз. мож я и ошибаюсь.

DJ Mogarych
03-05-2022, 21:04
А разве можно у ярлыка сделать относительный путь?

wasp14
03-05-2022, 22:42
А почему нет? Я точно помню, что на ХП переносил ярлыки на флешке. накидал два десятка стандарных и копировал на раб.стол. Ярлыки заводит Проводник, а он переменные раскрывает, знает что с ними надо делать. Ещё и параметры типа %L принимать обучен. так что да.
... пока ТоталКоммандер не освоил. потом прекратил фигнёз наниматься - CTRL+SHFT+F5 и сё :)

Александр.Быков@vk
07-05-2022, 10:58
Проясню ситуацию.У меня есть множество папок.В них есть файлы.Изображения.Мне нужно создать отдельную папку с ярлыками на эти изображения.С относительным путем.Есть ли какой нибудь скрипт,чтобы это сделать?

И есть еще ярлыки с абсолютным путем,который нужно заменить на относительный.

wasp14
07-05-2022, 22:25
У меня есть множество папок.В них есть файлы.Изображения.Мне нужно создать отдельную папку с ярлыками на эти изображения.С относительным путем »

Для этого, чтоб к файлам иметь доступ, копиями место не занимать - но с ними работать, Мелкомягкие сделали "хардлинк" и "симболик линк"

mklink /?

читай Жесткие и символические ссылки в Windows (https://tyapk.ru/blog/post/hardlink-and-symlink-windows) Сделай симб.линк на папку с файлами куда-надо и всё, зачем на каждый отдельный файл... Может это тебе и нужно?




© OSzone.net 2001-2012