|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Переименование файлов массово |
|
Любой язык - [решено] Переименование файлов массово
|
Ветеран Сообщения: 546 |
Здравствуйте, решение нужно на bat или powershell.
Есть каталог (в скрипте я должен буду указать до него путь), В этом каталоге есть другие папки … и в этих других папках есть различные файлы … необходимо переименовать эти файлы (папки переименовывать не нужно, только файлы).... Нужно переименовать по такому шаблону Где номер, это пятизначный номер, он будет идти по порядку, начиная с 00001 например файлы в папке: После применения скрипта должно получиться так: ![]() |
|
Отправлено: 07:25, 08-11-2024 |
fascinating rhythm Сообщения: 6626
|
Профиль | Отправить PM | Цитировать Нумерация сквозная или в каждой папке начинается заново?
|
------- Отправлено: 10:10, 08-11-2024 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 546
|
Профиль | Отправить PM | Цитировать DJ Mogarych, а это без разницы
![]() |
Отправлено: 10:31, 08-11-2024 | #3 |
fascinating rhythm Сообщения: 6626
|
Профиль | Отправить PM | Цитировать Powershell v5 и новее
Сквозная нумерация: $c = 1
dir c:\temp -Recurse -File |% {
$_ |Rename-Item -NewName "zz$($c.ToString("00000"))$($_.Extension)" -WhatIf
$c++
}
dir c:\temp -Recurse -Directory |% {
$c = 1
dir $_.FullName -File |% {
$_ |Rename-Item -NewName "zz$($c.ToString("00000"))$($_.Extension)" -WhatIf
$c++
}
}
|
------- Отправлено: 11:50, 08-11-2024 | #4 |
Ветеран Сообщения: 546
|
Профиль | Отправить PM | Цитировать DJ Mogarych, спасибо, выбрал второй вариант.. боялся, что возможно будет конфликт с переименованием, из-за того, что такое имя уже имеется (потому что скрипт запускается не один раз.. файлы добавляются новые, но присутствуют и старые, на которых скрипт уже отработал.. т.е. при запуске скрипта могут содержаться файлы с именами zz00001 (и подобными)), но никаких конфликтов нет, все переименовывается успешно
![]() |
|
Отправлено: 17:46, 08-11-2024 | #5 |
Ветеран Сообщения: 546
|
Профиль | Отправить PM | Цитировать Здравствуйте, Подскажите А в чём может быть проблема?, скрипт выполняется бесконечно. Я его останавливаю. Потом прохожусь по папкам, и вижу, что в какой-то из папок нумерация слишком большая, (например zz01543, Хотя в папке всего 53 файла.. И каждую секунду нумерация в файлах повышается всё больше и больше.. видимо она зацикливается на одной папке и дальше не проходит … пользуюсь вторым вариантом, где нумерация начинается заново.
dir c:\temp -Recurse -Directory |% { $c = 1 dir $_.FullName -File |% { $_ |Rename-Item -NewName "zz$($c.ToString("00000"))$($_.Extension)" $c++ } } Примечание (Может это важно).. Файлы с именами zz00001 (00002 и т.д) уже есть в папке.. Может это важно … Ну я пробовал например заменить zz на yy, чтобы не было повторяющихся имён, результат тот же, на каких-то папках начинает застревать, всегда на разных, если скрипт запустить ещё раз, та папка, на которой он застрял, будет переименована Как нужно, но потом застрянет На следующей, или через несколько папок.. |
Отправлено: 06:35, 28-11-2024 | #6 |
Ветеран Сообщения: 1758
|
|
Отправлено: 13:30, 28-11-2024 | #7 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Alexander_88,
@Echo Off &Cls Set "BoxIn=Z:\Box_In" Pushd "%BoxIn%"||(Echo Folder "%BoxIn%" not found &Pause &Exit /B 2) For /R "%BoxIn%" %%d In (.) Do ( Pushd "%%d" Call Set /A n=10000000 For %%i In (*.*) Do (Set /A n+=1 &Call Set @@@%%n%%=Ren "%%i" "zz%%n:~-5%%%%~xi") For /f "UseBackQ Tokens=1* Delims==" %%i IN (`2^>nul Set "@@@"`) Do (%%j &Set "%%i=") Popd ) Popd Pause Exit /B |
------- Последний раз редактировалось megaloman, 28-11-2024 в 18:12. Отправлено: 13:32, 28-11-2024 | #8 |
fascinating rhythm Сообщения: 6626
|
Профиль | Отправить PM | Цитировать Я изначально не предусматривал ситуацию с постоянным повторным переименованием одних и тех же файлов в каталоге.
Ну вот, можно попробовать: Сквозная нумерация # Каталог
$folder = 'C:\temp\rename'
# Буквенный индекс конечных файлов
$letters = 'zz'
# Кол-во разрядов числа конечных файлов
$digits = '00000'
$pattern = "$letters\d{$($digits.ToCharArray().count)}"
$renamed,$notRenamed = (dir $folder -File -Recurse -OutVariable files).where({$_.BaseName -match "^$pattern$"}, 'Split')
$numbers = $renamed.basename -replace '\D' |% {$_ -as [int]}
$freenum = (1..($files.count)).where({$_ -notin $numbers})
$c = 0
$notRenamed |% {
$_ |Rename-Item -NewName "$letters$($freenum[$c].ToString("$digits"))$($_.Extension)" -WhatIf
$c++
}
# Каталог
$folder = 'C:\temp\rename'
# Буквенный индекс конечных файлов
$letters = 'zz'
# Кол-во разрядов числа конечных файлов
$digits = '00000'
$pattern = "$letters\d{$($digits.ToCharArray().count)}"
dir $folder -Directory -Recurse |% {
$renamed,$notRenamed = (dir $_.fullname -File -OutVariable files).where({$_.BaseName -match "^$pattern$"}, 'Split')
$numbers = $renamed.basename -replace '\D' |% {$_ -as [int]}
$freenum = (1..($files.count)).where({$_ -notin $numbers})
$c = 0
$notRenamed |% {
$_ |Rename-Item -NewName "$letters$($freenum[$c].ToString("$digits"))$($_.Extension)" -WhatIf
$c++
}
}
Переименовываются только те файлы, которые не совпадают с паттерном. Если в нумерации есть пропуски, то они будут заполняться новыми файлами. |
------- Последний раз редактировалось DJ Mogarych, 28-11-2024 в 17:31. Отправлено: 17:23, 28-11-2024 | #9 |
Ветеран Сообщения: 546
|
Профиль | Отправить PM | Цитировать Всем спасибо за помощь.
DJ Mogarych, проблема исчезла, Сейчас все файлы переименовываются ![]() |
Отправлено: 15:41, 29-11-2024 | #10 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Переименование файлов | gremlintv2 | Скриптовые языки администрирования Windows | 3 | 27-06-2016 23:42 | |
CMD/BAT - Переименование файлов | Verilog | Скриптовые языки администрирования Windows | 4 | 10-12-2014 14:55 | |
Переименование файлов | B1010 | Видео и аудио: обработка и кодирование | 0 | 28-09-2014 11:38 | |
переименование файлов | mask | Программирование и базы данных | 6 | 20-05-2003 00:53 | |
Переименование файлов | Pavelz | Microsoft Windows NT/2000/2003 | 7 | 24-01-2003 10:32 |
|