Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
0 / 1 / 0
Регистрация: 28.07.2016
Сообщений: 142

Переименование файлов с счетчиком

30.01.2021, 14:36. Показов 3245. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, пожалуйста, как реализовать следующее:

На батник перемещается файл и к его названию спереди прибавляется четырехзначный счетчик вида "0001. " ("0002. ","0003. " и т.д.), сам счетчик хранится во второй строке файла count.txt рядом с батником. Переименованный файл остается лежать в той же папке откуда переносился на батник. К счетчику в файле count.txt добавляется 1.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.01.2021, 14:36
Ответы с готовыми решениями:

Массовое переименование в папках файлов со счетчиком
Привет. Есть несколько тысяч каталогов с фотофайлами внутри. Нужно пройти по каждому каталогу (список имен каталогов есть) и...

Переименование PDF-файлов в имена, берущиеся из содержимого этих файлов
Всем доброго времени суток!:) Подскажите, пожалуйста, как переименовать файл с расширением pdf, взяв сам текст для наименования файла из...

Переименование файлов именами существующих файлов
Доброго времени суток! Помогите, пожалуйста, решить задачу. Не программист, сам бат-ники писать их не умею, знаю только, что с их помощью...

31
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
30.01.2021, 14:40
Sisin, А если 10, 100 и т.д.? Нули остаются или замещаются разрядом? Во второй строке count.txt только счетчик и ничего больше?
0
0 / 1 / 0
Регистрация: 28.07.2016
Сообщений: 142
30.01.2021, 14:45  [ТС]
Karen87, замещаются разрядом до 9999, потом счетчик сбрасывается.
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
30.01.2021, 14:49
Цитата Сообщение от Karen87 Посмотреть сообщение
Во второй строке count.txt только счетчик и ничего больше?
Уточните
0
0 / 1 / 0
Регистрация: 28.07.2016
Сообщений: 142
30.01.2021, 14:53  [ТС]
Цитата Сообщение от Karen87 Посмотреть сообщение
Уточните
Только счетчик. Я потом скопирую батник и каждый новый будет брать счетчик с разных строк)
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
30.01.2021, 14:59
Чистым батником я это реализовать не буду. Если не смущает использование допутилит, то реализую легко
0
0 / 1 / 0
Регистрация: 28.07.2016
Сообщений: 142
30.01.2021, 15:06  [ТС]
Цитата Сообщение от Karen87 Посмотреть сообщение
Чистым батником я это реализовать не буду. Если не смущает использование допутилит, то реализую легко
С допутилитой сейчас и работает) Хотел реализовать батником)
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
30.01.2021, 15:08
Так это и будет реализовано батником, но обращаться батник для определённых операций будет к консольной допутилите
0
0 / 1 / 0
Регистрация: 28.07.2016
Сообщений: 142
30.01.2021, 15:26  [ТС]
Цитата Сообщение от Karen87 Посмотреть сообщение
Так это и будет реализовано батником, но обращаться батник для определённых операций будет к консольной допутилите
Такой вариант у меня и есть.
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
30.01.2021, 15:28
Цитата Сообщение от Sisin Посмотреть сообщение
Такой вариант у меня и есть.
Покажите, если не тайна конечно. Очень любопытно как реализовано
0
0 / 1 / 0
Регистрация: 28.07.2016
Сообщений: 142
30.01.2021, 17:40  [ТС]
Цитата Сообщение от Karen87 Посмотреть сообщение
Покажите, если не тайна конечно. Очень любопытно как реализовано
Нет под рукой.

Вроде сам сделал как хотел:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@echo off
 
for /f %%a in (count.txt) do (
set /a count = %%~a
call set /a count += 1
)
 
for %%i in (%*) do (
if %count% lss 10 (rename %%~nxi 000%count%". "%%~nxi)
if %count% lss 100 if %count% geq 10 (rename %%~nxi 00%count%". "%%~nxi)
if %count% lss 1000 if %count% geq 100 (rename %%~nxi 0%count%". "%%~nxi)
if %count% lss 10000 if %count% geq 1000 (rename %%~nxi %count%". "%%~nxi)
)
 
echo. > count.txt
if %count% lss 10000 (echo %count% > count.txt)
if %count% geq 10000 (echo 0 > count.txt)
 
exit
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
30.01.2021, 17:48
Цитата Сообщение от Sisin Посмотреть сообщение
Вроде сам сделал как хотел:
Если следовать Вашему ТЗ, то Ваш код работает некорректно
0
0 / 1 / 0
Регистрация: 28.07.2016
Сообщений: 142
30.01.2021, 17:57  [ТС]
Имена с пробелами не обрабатывает.
Еще что-то не так?
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
30.01.2021, 18:29
Вот код, который должен полностью решать поставленную задачу:
Windows Batch file
1
2
3
4
@echo off
powershell -executionpolicy bypass -command "$file=get-content 'C:\test\count.txt'; rename-item '%~1' """$($file[1])%~nx1"""; $file | ForEach-Object {if ([array]::IndexOf($file,"""$_""") -eq 1) {if ($_ -eq '9999') {'0000'} else {([int32]1+$_).ToString("""D4""")}} else {"""$_"""}} | set-content 'C:\test\count.txt'"
pause
exit
Вместо C:\test\count.txt указываете полный путь до файла count.txt в 2-х местах скрипта

Добавлено через 2 минуты
Цитата Сообщение от Sisin Посмотреть сообщение
Еще что-то не так?
Скорректированный счётчик не будет вставать во 2-ю строку count.txt

Добавлено через 24 минуты
Во избежание проблем с кириллицей в count.txt используйте этот код:
Windows Batch file
1
2
3
4
@echo off
powershell -executionpolicy bypass -command "$file=get-content 'C:\test\count.txt'; rename-item '%~1' """$($file[1])%~nx1"""; $file | ForEach-Object {if ([array]::IndexOf($file,"""$_""") -eq 1) {if ($_ -eq '9999') {'0000'} else {([int32]1+$_).ToString("""D4""")}} else {"""$_"""}} | set-content 'C:\test\count.txt' -encoding default"
pause
exit
1
0 / 1 / 0
Регистрация: 28.07.2016
Сообщений: 142
30.01.2021, 19:36  [ТС]
Как считать вторую строку я понял, но как ее изменить не могу сообразить:

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
@echo off
 
SetLocal EnableDelayedExpansion
 
set /a m = 0
for /f "usebackq delims=" %%a in ("count.txt") do (
  set /a m += 1
  set "str!m!=%%a"
)                                       
 
echo.%str2%
 
pause
Можно добавить идентификатор вроде "Счетчик 1 = 10", а потом его искать и заменять, но я это пока не осилил.

Добавлено через 4 минуты
Цитата Сообщение от Karen87 Посмотреть сообщение
Во избежание проблем с кириллицей в count.txt используйте этот код:
Спасибо, конечно, но я не хочу Мерседес, хочу именно Мазду красного цвета)))
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
30.01.2021, 19:41
Sisin, я Вам предоставил готовый код по Вашей просьбе, который Вы до сих пор не проверили

Добавлено через 2 минуты
И я изначально сказал, что писать код исключительно на batch я не буду, потому что это обезьянство

Добавлено через 1 минуту
Тем не менее предоставленный мною вариант решения не требует никаких дополнительных утилит и работает, как батник
0
0 / 1 / 0
Регистрация: 28.07.2016
Сообщений: 142
30.01.2021, 19:56  [ТС]
Цитата Сообщение от Karen87 Посмотреть сообщение
Тем не менее предоставленный мною вариант решения не требует никаких дополнительных утилит и работает, как батник
Не могу пока проверить. Мне нужен батник для рабочего места. Возможно есть ограничение на исполнение powershell.
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
30.01.2021, 19:59
Sisin, на своей машине-то Вы можете проверить?
0
0 / 1 / 0
Регистрация: 28.07.2016
Сообщений: 142
30.01.2021, 20:41  [ТС]
Karen87, не работает.

Set-Content : Не удается привязать параметр "Encoding". Не удается преобразоват
ь значение "default" в тип "Microsoft.PowerShell.Commands.FileSyste mCmdletProvi
derEncoding" из-за недопустимых значений перечисления. Укажите одно из следующи
х значений перечисления и повторите попытку. Возможны следующие значения перечи
сления: "Unknown, String, Unicode, Byte, BigEndianUnicode, UTF8, UTF7, Ascii".
строка:1 знак:290
+ $file=get-content 'C:\ТЕСТ\count.txt'; rename-item 'C:\ТЕСТ\0001.тест.pdf' "$
($file[1])0001.тест.pdf"; $file | ForEach-Object {if ([array]::IndexOf($file,"$
_") -eq 1) {if ($_ -eq '9999') {'0000'} else {([int32]1+$_).ToString("D4")}} el
se {"$_"}} | set-content 'C:\ТЕСТ\count.txt' -encoding <<<< default
+ CategoryInfo : InvalidArgument: ( [Set-Content], ParameterBin
dingException
+ FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft .PowerSh
ell.Commands.SetContentCommand

Для продолжения нажмите любую клавишу . . .
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
30.01.2021, 21:13
Sisin, какая ОС установлена и версия powershell?

Добавлено через 1 минуту
Вы что-то, по-моему, навертели в скрипте лишнего. Покажите используемый Вами скрипт с измененными путями, о которых я говорил

Добавлено через 27 минут
Sisin, а так:
Windows Batch file
1
2
3
4
@echo off
powershell -executionpolicy bypass -command "$file=get-content 'C:\test\count.txt'; rename-item '%~1' """$($file[1])%~nx1"""; $file | ForEach-Object {if ([array]::IndexOf($file,"""$_""") -eq 1) {if ($_ -eq '9999') {'0000'} else {([int32]1+$_).ToString("""D4""")}} else {"""$_"""}} | set-content 'C:\test\count.txt' -encoding UTF8"
pause
exit
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.01.2021, 21:13
Помогаю со студенческими работами здесь

Переименование файлов в папках с добавлением к именам этих файлов имён этих папок
Есть 4 папки с архивом записей с камеры видеонаблюдения с именами 13 14 15 16. В каждой папке находится 60 минутных файлов в формате...

Переименование файлов
Доброго все дня! Подскажите как с помощью cmd переименовать файл так чтобы в новом имени не указывать расширение т.е. например rename...

Переименование файлов
Здравствуйте. В текущем каталоге есть файлы *.jpg , их имена могут содержать следующие символы: +, плюс спецсимволы ~!@#$%^&amp;*()'` ...

Переименование файлов
@echo off setlocal enabledelayedexpansion chcp 1251 set /p k=Введите количество ведущих нулей for /L %%j in (1,1,%k%) do set...

Переименование файлов
Добрый день, нужна помощь, есть каталог, в котором файлы с длинными названиями, их объединяет то, в названии находятся символы _from ,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Видеокарта простаивает ночами? Вот 4 проекта, которые загрузят её наукой
Programma_Boinc 10.04.2026
Видеокарта простаивает ночами? Вот 4 проекта, которые загрузят её наукой Если на Windows стоит дискретная NVIDIA или AMD — можно отдать её вычислительную мощность реальным исследованиям. . . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru