Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Пакетное переиминования файлов (http://forum.oszone.net/showthread.php?t=349599)

Publipor 12-09-2021 14:52 2966488

Пакетное переиминования файлов
 
Добрый день.Нужна помощь в доработке скрипта. В данной теме полный 0, но нет времени для полно изучения.
Код:

@for /f "delims=" %%i in ('"dir /a-d/b *.png"') do @set /a n+=1& cmd /v:on /c ren "%%i" !n!.png
Проблема такая https://ibb.co/DfnVkSq При создании нового имени для данных файлов, файлы с наименованием image(10).png, image(11).png нумероваться как первыми ,хотя должны быть последними. Не подскажете как исправить?

Iska 12-09-2021 15:48 2966493

Не должны: dir не знает иной сортировки, нежели лексикографическая (а в Вашем примере — вообще в порядке чтения из оглавления каталога: на NTFS будет по алфавиту, на FAT32 — по мере создания записей).

Publipor 12-09-2021 16:09 2966497

Цитата:

Цитата Iska
Не должны: dir не знает иной сортировки, нежели лексикографическая (а в Вашем примере — вообще в порядке чтения из оглавления каталога: на NTFS будет по алфавиту, на FAT32 — по мере создания записей). »

Жаль. Тогда не подскажете выход с данной ситуации?

alpap 12-09-2021 16:19 2966498

именовать файлы с лидирующими недостающими нулями по отношению к разрядности числа в имени
file001..file099
file-0001..file-1000
...

Iska 12-09-2021 18:54 2966510

Цитата:

Цитата Publipor
не подскажете выход с данной ситуации? »

Подскажу. Можете использовать файловый менеджер, поддерживающий а) алфавитно-числовую сортировку, которую применяет Проводник (начиная с Windows XP), б) переименование с заданными возможностями. Из известных мне — это Far Manager+плагин Visual Renaming files и Total Commander (возможность группового переименования идёт в комплекте — Ctrl-M).

Но лучше зараз:
Цитата:

Цитата alpap
именовать файлы с лидирующими недостающими нулями по отношению к разрядности числа в имени »


megaloman 12-09-2021 22:16 2966520

Цитата:

Цитата alpap
именовать файлы с лидирующими недостающими нулями по отношению к разрядности числа в имени »

Код:

        set /a n=1000
        @for /f "delims=" %%i in ('"dir /a-d/b *.png"') do @set /a n+=1& cmd /v:on /c ren "%%i" !n:~-3!.png


alpap 13-09-2021 00:56 2966531

на PowerShell
Код:

$d = 'C:\Papka'

sl $d
Switch -Regex ((gci -af .).Name) {
  '^image\((\d+)\)\.png$' {
    rni $Matches[0] ($Matches[0] -Replace $Matches[1], $('{0:d3}' -f [int]$Matches[1]))
  }
}

будет переименовывать не подряд общим чохом, а именно:
image(10).png в image(010).png
image(1).png в image(001).png
...

Iska 13-09-2021 19:49 2966566

alpap, а что будет, если потом опять создадут image(1).png, image(2).png, …?

alpap 14-09-2021 05:46 2966585

Цитата:

Цитата Iska
если потом опять »

мой код для причесывания, соответственно разово, а в дальнейшем надо создавать как положено. Но можно и повторить, если опять на грабли. Этот код найдет и переименует именно этот же файл, скажем так исправит его имя на правильное.
А, имеется ввиду что после причесывания наступаем на грабли в этой папке - ну надо не допускать ошибок, если доверили руль, надо не просто доехать, а и машину не разбить и не задавить никого.

megaloman 14-09-2021 10:00 2966596

Цитата:

Цитата Iska
а что будет, если потом опять создадут image(1).png, image(2).png, …? »

Ключевое слово: потом. Всё таки, ИМХО, надо не отвечать на вопрос, как он поставлен, а пытаться въехать в задачу. ИМХО (мои домыслы) второй файл не может быть создан ранее первого. Поэтому надо не изменять то, что в скобках (1) (2) и т д., а переименовывать все файлы чохом в сортировке по времени
Код:

@Echo Off
cls
        Set "BoxIn=Z:\Box_In"
        Set "Name=тра ля ля"
        Set "Ext=png"
        Set /A Len=4
       
        Pushd "%BoxIn%" ||(Echo Folder "%BoxIn%" not found &Pause &Exit /B 1)
       
        Set /A Num=100000000
        For /F "usebackq tokens=2 delims=()" %%n In (`2^>nul Dir "%BoxIn%\%Name%(*).%Ext%" /B /A:-D /O:D`) Do (
                Set /a Num+=1
                Call Ren "%Name%(%%n).%Ext%" "tmp.%Name%(%%Num:~-%Len%%%).%Ext%"
        )
        For /F "usebackq tokens=1* delims=." %%i In (`2^>nul Dir "%BoxIn%\tmp.%Name%(*).%Ext%" /B /A:-D`) Do Ren "tmp.%%j" "%%j"
        Popd
Pause               
Exit /B


alpap 15-09-2021 01:34 2966663

Цитата:

Цитата megaloman
по времени »

время может быть и сбито, а нумерация такая как необходимо да на большом количестве фото бывает ой как важна, пересматривай потом этот ворох чтобы уложить и переименовать как надо. А если не важна эта деталь или с датами все в порядке, то да, очень удобно, причем это можно повторять при надобности.

megaloman 15-09-2021 09:54 2966673

Цитата:

Цитата alpap
время может быть и сбито, а нумерация такая как необходимо да на большом количестве фото бывает ой как важна, пересматривай потом этот ворох чтобы уложить и переименовать как надо. »

Значит, надо переименованные файлы перемещать в другую папку.
Код:

@Echo Off
cls
        Set "BoxIn=Z:\Box_In"
        Set "BoxOut=Z:\Box_In\Renum"
        Set "Name=image"
        Set "Ext=png"
        Set /A Len=4
       
        Pushd "%BoxIn%" ||(Echo Folder "%BoxIn%" not found &Pause &Exit /B 1)
        Call :Add "%BoxOut%\%Name%(*).%Ext%" "Add"

        For /F "usebackq tokens=2 delims=()" %%n In (`2^>nul Dir "%BoxIn%\%Name%(*).%Ext%" /B /A:-D /O:D`) Do (
                Set /a Num=%%n+%Add%
                Call Set "Num=00000000%%Num%%"
                Call >nul Move "%Name%(%%n).%Ext%" "%BoxOut%\%Name%(%%Num:~-%Len%%%).%Ext%"
        )
        Popd
Pause               
Exit /B

:Add
SetLocal
        For /F "usebackq tokens=2 delims=()" %%n In (`2^>nul Dir %1 /B /A:-D /O:-N`) Do Set "NN=%%n" &GoTo :Add1
        2>&1 Md "%~dp1"
        EndLocal &Set /A %~2=0
        Exit /B 0

        :Add1
        If "%NN:~0,1%"=="0" Set "NN=%NN:~1%" &GoTo :Add1
EndLocal &Set /A %~2=%NN%
Exit /B

Цитата:

Цитата Iska
а что будет, если потом опять создадут image(1).png, image(2).png, …? »

Вновь созданные 1 2 3 ... будут перемещены в ту другую папку с продолжением нумерации к имеющимся там файлам.
Цитата:

Цитата alpap
мой код для причесывания, соответственно разово, а в дальнейшем надо создавать как положено. »

Сторонний софт не заставите это делать.
Move c изменением имени работает (проверил и в XP)

Iska 15-09-2021 10:12 2966675

Цитата:

Цитата megaloman
Сторонний софт не заставите это делать. »

А сторонний ровно один — Проводник ;).


Время: 13:34.

Время: 13:34.
© OSzone.net 2001-