Имя пользователя:
Пароль:
 | Правила  

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

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

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


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

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


всем привет! помогите со счетчиком в bat-файле. Задача следующая: привести имена файлов к виду name_01.txt, name_02.txt, name_03.txt и тд.
Сам додумался до вот этого.

Код: Выделить весь код
@echo off
SetLocal EnableDelayedExpansion 
for %%t in (*.txt) do (set /a m+=1 rename %%t !m!.txt)
Но работает не так как надо:
1. если файлов не более 37, то имя присваивается
name_1.txt
name_2.txt
.........
name_37.txt

2. как только добавляется 38-й файл, имена присваиваются вот так
name_1.txt
name_10.txt
name_38.txt
........
name_73.txt

3. когда файлов более 100, ситуация для меня еще более странная
name_1.txt
name_10.txt
name_100.txt

Вообщем что-то не так, а вот что не пойму....

Отправлено: 19:35, 13-04-2013

 

Пользователь


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

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


Iska прав. Можно перебирать от 1 до FF. 10(10) = 0A(16).

gora, поставил эксперимент. Новые файлы не подхватываются (ставил паузу в цикле, а потом создал пару файлов - до и после алфавита).
Среда внутри скобок выполняется единоразово в новом дочернем потоке cmd /c.

Вариант через недокументированный код возврата (минус: будет работать совсем не быстро). Да и решил использовать Dir.

Код: Выделить весь код
@echo off
SetLocal EnableExtensions EnableDelayedExpansion

Set SrcFolder=l:\Bash\16X-ren\Test

::rd /Q "%SrcFolder%"& md "%SrcFolder%"& For /L %%C in (1,1,255) do <nul set test=>"%SrcFolder%\%%C"
::pause
Set C=0
For /F "delims=" %%A in ('dir /b /a-D-L "%SrcFolder%\*"') do (
  Set /a C+=1
  if !C! GTR 255 (echo Too more files& goto ext)
  cmd /c exit /b !C!
  ren "%SrcFolder%\%%A" "name_!=ExitCode:~-2!.txt"
)
:ext
pause
P.S. Пока писал, не увидел ответа ТС.
Xeruvim4ik, и во что переименовывать файл под номером 256? В 16-ричную математику он не влезает в 2 разряда.
Уточните примерное кол-во файлов. Это критично.

-------
Alex Dragokas


Отправлено: 19:35, 14-04-2013 | #11



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

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


Ветеран


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

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


gora, я это пробовал. В зависимости от условий, получаем либо пропуск в нумерации, либо отлуп вида «файл существует» при переименовании.

Отправлено: 20:49, 14-04-2013 | #12


Ветеран


Contributor


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

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


Итак, Xeruvim4ik хочет иметь файлы вида Name_nn.txt. Если nn -десятичное - это не более 99 файлов, шестнадцатиричное - не более ff (=255) файлов. Можно изобрести, допустим, тридцатьшестьричную систему, где в каждом разряде будут символы из набора 0123456789abcdefghijklmnopqrstuvwxyz, но при этом всё равно число файлов не очень большое =1295 (если не просчитался). Вот решение для такой системы
Код: Выделить весь код
@Echo Off
SetLocal EnableExtensions EnableDelayedExpansion

Set Num=0123456789abcdefghijklmnopqrstuvwxyz
Set /A Razrad=36

Set /A NNN=%Razrad%-1
Set /A i=0
Set /A j=0

Set End=_%Time:~0,2%%Time:~3,2%%Time:~6,2%%Time:~9,2%

FOR /F "usebackq delims=" %%f IN (`Dir "*.txt" /B /A:-D`) DO (
	Set /A j=!j!+1
	If !j! GTR %NNN% Set /A j=0 & Set /A i=!i!+1
        If !i! GTR %NNN% GoTo :Eof

	Call :Number !i! !j!
        Move "%%~f" "Name_!RRR!.txt%End%"
)

FOR /F "usebackq delims=" %%f IN (`Dir "*.txt%End%" /B /A:-D`) DO (
	Set NEnd=%%~f
	Ren "!NEnd!" "!NEnd:~0,-9!"
)
GoTo :Eof

:Number
Set RRR=!Num:~%1,1!!Num:~%2,1!
GoTo :Eof
Длинновато, но вроде бы работает.
Цитата Xeruvim4ik:
файлов больше 255.... и даже не 256
Xeruvim4ik, осознайте, что в рамках двух разрядов вы не можете закодировать бесконечное число файлов, поэтому должен быть какой-то верхний предел, либо не требовать, чтобы файлы имели вид Name_nn.txt, а, например, Name_N.txt, где N изменяется от 1 до бесконечности.
Спасибо Gora, похоже, не всё так просто в одной директории, как мне хотелось. Поэтому в этом решении исходные перемещаю сначала в файлы, где к расширению добавляю время запуска батника (время должно быть в формате чч:мм:сс,дд с любыми разделителями), а затем переименовываю в txt

Кстати, если написать Set /A Razrad=16, получим классическую шестнадцатиричную нумерацию от 01 до FF

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


Последний раз редактировалось megaloman, 14-04-2013 в 22:04.

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

Отправлено: 21:34, 14-04-2013 | #13


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


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

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


megaloman, вы гений, это то, что нужно, я бы до такого никогда не додумался

Отправлено: 21:57, 15-04-2013 | #14



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Не срабатывает скрипт переноса файлов по размеру - !!! с условием переименования !!! dark-------13 Скриптовые языки администрирования Windows 0 19-03-2012 15:27
Нужна программа для пакетного переименования файлов gaulle Хочу все знать 5 18-01-2012 07:30
Прочие - Программы для массового переименования каталогов и файлов Daiv Программное обеспечение Windows 39 17-06-2011 16:33
Скрипт автоматического переименования файлов mp3 Ламер Программирование в *nix 2 02-03-2011 19:59
CMD/BAT - [решено] Не работает скрипт группового переименования по маске Ins_16 Скриптовые языки администрирования Windows 2 09-12-2010 14:52




 
Переход