Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Нумерация файлов в папке

Ответить
Настройки темы
CMD/BAT - [решено] Нумерация файлов в папке

Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


Здравствуйте, прошу помощи, исходные данные такие:

1. есть общая папка: "k12345"
2. в этой папке есть еще 2-3: "подпапка 1", "подпапка 2" и тд.
3. в этих подпапках лежат файлы .png с названиями:
k12345_1.png
k12345_2.png
k12345_4.png
k12345_6.png

нужен .bat или .ps1, который мы кладем в папку "k12345" и при выполнении которого файлы в подпапках формата .png нумеруются корректно, а именно:
k12345_1.png
k12345_2.png
k12345_3.png
k12345_4.png

Заранее прошу прощения, если что-то не так описала, буду очень благодарна за помощь!

Отправлено: 14:15, 13-03-2024

 

Deadooshka


Сообщения: 2482
Благодарности: 671

Профиль | Отправить PM | Цитировать


Вот например. В подпапках есть файлы определённого формата k<пять_цифр>_<цифра>.png. Нужно отсортировать эти файлы по <цифре> и переименовать эти файлы, изменив эту <цифру> на цифру, равную порядковому номеру файла в отсортированном списке файлов подобного формата в подпапке. Правильное условие?

Отправлено: 14:51, 13-03-2024 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Sham:
Вот например. В подпапках есть файлы определённого формата k<пять_цифр>_<цифра>.png. Нужно отсортировать эти файлы по <цифре> и переименовать эти файлы, изменив эту <цифру> на цифру, равную порядковому номеру файла в отсортированном списке файлов подобного формата в подпапке. Правильное условие? »
Да, но в названии после "k" может быть и 4 и 6 цифр, это артикул, т.е. опираемся на ту цифру, что после нижнего подчеркивания

Отправлено: 14:57, 13-03-2024 | #3


Deadooshka


Сообщения: 2482
Благодарности: 671

Профиль | Отправить PM | Цитировать


А если переименование вызовет коллизию? Циферку меняем, а такой файл в папке уже существует.

Отправлено: 15:01, 13-03-2024 | #4


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Sham:
А если переименование вызовет коллизию? Циферку меняем, а такой файл в папке уже существует. »
заменяем, мне важно, чтобы была нумерация без прерываний, может переименовывание провести в 2 этапа, например сперва после _ поставить a,b,c,d и тд (более 25 не будет), а потом пройтись и пронумеровать, тут вам виднее наверно, я в этом не сильна ))

Отправлено: 15:42, 13-03-2024 | #5


Deadooshka


Сообщения: 2482
Благодарности: 671

Профиль | Отправить PM | Цитировать


тестируйте
Код: Выделить весь код
get-childitem $PSScriptRoot -Directory | % {
  $dir = $_; $count = 0;
  $dir | get-childitem -File | % {
    if ($_.Name -match '^(k\d+_)(\d+)(\.png)$') {
      [pscustomobject]@{ N = [int]$matches[2]; M = $matches; O = $_; }
    }
  } | sort-object 'N' | % { ++$count;
    while (test-path ($newpath = join-path $dir.fullname ($name = $_.M[1] + $count + $_.M[3]))) {
      if ($_.O.fullname -eq $newpath) { return }
        ++$count;
      }
    'rename: {0} -> {1}' -f $_.O.fullname, $name
    $_.O.MoveTo($newpath);
  }
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:33, 13-03-2024 | #6


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


Огромное спасибо!

Отправлено: 17:54, 13-03-2024 | #7


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6493
Благодарности: 1465

Профиль | Отправить PM | Цитировать


Подразумевается, что файлы k12345 имеются в разных подпапках.
Код: Выделить весь код
$tmpAdd = "tmpp"
$c = 1

dir $PSScriptRoot -Recurse -Include "*.png" |% {
    Rename-Item $_ -NewName "$($tmpAdd + $_.name)"
}

dir $PSScriptRoot -Recurse -Include "*.png" |sort {[int]($_.basename -replace '\D')} |% {
    Rename-Item $_ -NewName "$(($_.basename -replace "\d+$","$c" -replace "^($tmpAdd)+") + $_.Extension)"
    $c++
}

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:00, 13-03-2024 | #8


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@Echo Off &Cls
>nul Chcp 1251
	Set "BoxIn=Z:\Box_In"
	Set "BoxShr=k12345"
	Set Mask="%BoxShr%_*.png"

	Set "BoxAdd=Z:\Soft_Arc\123"
	Set Arc="C:\Program Files\7-Zip\7z.exe" a -mx9 "Z:\Box_Arc\archive.7z"

	Set /A M=0
	Pushd "%BoxIn%\%BoxShr%" || (Echo Folder "%BoxIn%\%BoxShr%" not found &Pause &Exit /B 2)
		For /R "%BoxIn%\%BoxShr%" %%f In ("%Mask%") Do (
			Set /A M+=1
			Call Set "@@@%%M%%=Ren "%%f.tmp" "%BoxShr%_%%M%%%%~xf""
			Ren "%%f" "%%~nxf.tmp"
		)
		For /F "usebackq tokens=2 delims==" %%f In (`2^>nul Set "@@@"`) Do %%f
	Popd
Pause
Exit /B 0

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:28, 14-03-2024 | #9


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


Всем спасибо, очень выручили и сэкономили много часов времени, обожаю вас!

Отправлено: 00:08, 27-03-2024 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Нумерация файлов в папке

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Удаление файлов старше N дней в подпаках, кроме файлов в самой папке Negtm Скриптовые языки администрирования Windows 4 03-02-2017 15:30
CMD/BAT - Проверка существования файлов в папке и копирование файлов в другую Funbeee Скриптовые языки администрирования Windows 2 07-09-2016 12:51
CMD/BAT - [решено] Многократное копирование нескольких файлов и нумерация копий. Metallor Скриптовые языки администрирования Windows 5 02-01-2016 09:57
Интерфейс - Отображение файлов в папке. D-IMAN Microsoft Windows 2000/XP 4 28-11-2011 11:22
CMD/BAT - Обновление файлов в папке Mirrad Скриптовые языки администрирования Windows 0 11-02-2011 12:45




 
Переход