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

Компьютерный форум 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

 

Аватара для zion87

Старожил


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

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


попробуйте так
Код: Выделить весь код
@echo off
SetLocal EnableDelayedExpansion
for %%t in ("*.txt") do (
	set /a m+=1
	if !m! LSS 10 ren %%t name_00!m!.txt
	if !m! LSS 100 ren %%t name_0!m!.txt
	if !m! LSS 1000 ren %%t name_!m!.txt
)

Отправлено: 20:06, 13-04-2013 | #2



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

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


Ветеран


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

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


Я бы вырезал:
читать дальше »
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set /a iCount = 1

for %%i in ("*.txt") do (
	set sCount=000!iCount!
	ren "%%~i" "name_!sCount:~-4!.txt"
	set /a iCount += 1
)

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

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


Ветеран


Contributor


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

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


Iska, позволил себе наглость чуть подправить Ваше решение,
вместо начального значения счетчика =1 поставил 10001
Код: Выделить весь код
@echo off
SetLocal EnableExtensions EnableDelayedExpansion

set /a iCount = 10001

For %%i In (*.txt) do ren "%%~i" "name_!iCount:~-4!.txt" && Set /a iCount += 1

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

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

Отправлено: 22:58, 13-04-2013 | #4


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


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

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


Цитата megaloman:
@echo off
SetLocal EnableExtensions EnableDelayedExpansion
set /a iCount = 10001
For %%i In (*.txt) do ren "%%~i" "name_!iCount:~-4!.txt" && Set /a iCount += 1 »
Спасибо! но файлы именуются name_0001.txt, name_0002.txt .......... name_0248.txt
А нужно name_01.txt, name_02.txt .......... name_99.txt, name_0a.txt и т.д.

не совсем понял, что значит iCount:~-4 ?

Отправлено: 23:51, 13-04-2013 | #5


Ветеран


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

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


megaloman, интересно. Подводных камней (для данного контекста, разумеется) не будет?

Цитата Xeruvim4ik:
не совсем понял, что значит iCount:~-4 ? »
set /?
Код: Выделить весь код
…
Можно также использовать строки расширения.

    %PATH:~10,5%

расширит действие переменной среды PATH, затем использует только 5
символов, которые начинаются с 11-го символа (пропустив 10) расширенного
результата.  Если длина не указана, по умолчанию используется оставшееся
значение переменной.  Если оба значения (длина и число пропускаемых символов)
отрицательны, следующим используемым значением будет длина значения переменной
среды, добавленной к указанному значению пропуска или указанной длины.

    %PATH:~-10%

извлечет последние 10 символов переменной PATH.

    %PATH:~0,-2%

извлечет все символы переменной PATH, за исключением 2-х последних.
…


Цитата Xeruvim4ik:
А нужно name_01.txt, name_02.txt .......... name_99.txt, name_0a.txt и т.д. »
За «99» «0a» не может следовать. За «09» — да, за «99» — ну, никак.

Отправлено: 00:41, 14-04-2013 | #6


Ветеран


Contributor


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

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


Iska, Будет подводный камень: если число файлов >9999. Или если какой-либо файл имеет имя name_xxxx.txt. Наверное лучше всё-таки безусловным образом наращивать счетчик. Или анализировать перед переименованием имена файлов. Но проблема в другом, Xeruvim4ik, похоже, хочет получить шестнадцатиричную нумерацию 01 02 ... 0f 10 11 ... ff, при этом число файлов не более 255. И, самое главное, у меня не получается отобразить и нарастить шестнадцатиричное число, похоже, при присваивании автоматически шестнадцатиричное конвертируется в десятичное:

Set /A iCount = 0xff
Echo %iCount%

Получаем 255

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


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


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


Ветеран


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

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


Цитата megaloman:
Iska, Будет подводный камень: если число файлов >9999. »
Ну, это понятно. Равно как и ограничение по разрядности «set /a».

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


Аватара для gora

Ушёл из жизни


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

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


Извините, коллеги. А ни кого не смущает тот факт, что переименование ведется в той же самой папке откуда берутся исходные файлы? Цикл For будет\может повторно перебирать уже переименованные файлы, если они окажутся по алфавиту после обрабатываемых в данный момент...
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:53, 14-04-2013 | #9


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


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

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


Цитата Iska:
За «99» «0a» не может следовать. За «09» — да, за «99» — ну, никак »
Ок, понял. А как сделать тогда чтобы после 09 следовало 0a ?


Цитата megaloman:
при этом число файлов не более 255. »
файлов больше 255.... и даже не 256

Цитата gora:
переименование ведется в той же самой папке »
это не проблема, можно сделать copy или move. Главное получить нужные имена.

Отправлено: 18:50, 14-04-2013 | #10



Компьютерный форум 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




 
Переход