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

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

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

Ветеран


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

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


Изменения
Автор: Alexander_88
Дата: 01-04-2018
Здравствуйте. Можно ли сделать такой бат, который будет переименовывать конкретный файл?.. но не стандартно переименовывать, а вот так....... при запуске батника, цифра в имени нужного файла (который я сам укажу), должна уменьшиться на 1.
Известно что
Цифра находится в конце имени файла.. больше цифр в имени нету.. ни в середине, ни в начале.
Расширения у файла нету.
Известно имя файла (кроме цифры в конце имени).

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

К примеру нужный нам файл "hello world - 15" (в скрипте мы должны указать его имя без цифры)
после запуска bat файла, этот нужный нам файл должен называться "hello world - 14"
если еще раз запустить бат файл, нужный файл будет называться "hello world - 13"
и т.д.
Если дойдет до нуля, т.е. файл будет с именем "hello world - 0", то ничего не должно происходить.

Отправлено: 16:43, 01-04-2018

 

Ветеран


Contributor


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

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


Цитата Alexander_88:
К примеру нужный нам файл "hello world - 15" (в скрипте мы должны указать его имя без цифры) »
Без числа, ИМХО. Каким образом? "hello world"? "hello world - "?
"-" обязательно обрамляются пробелами " - "?

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

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

Отправлено: 19:09, 01-04-2018 | #2



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

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


Ветеран


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

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


Цитата Alexander_88:
цифра в имени нужного файла »
Цитата Alexander_88:
К примеру нужный нам файл "hello world - 15" »
Тогда не «цифра». Число.

Цитата Alexander_88:
(в скрипте мы должны указать его имя без цифры) »
Зачем указывать в самом пакетном файле, а не параметром пакетного файла? Зачем указывать имя без числа, а не просто имя? И с какого тогда числа начинать перебор значений в сторону уменьшения (пакетные файлы хоть и ограничены, но позволяют манипулировать относительно большими числами)?
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:36, 01-04-2018 | #3


Ветеран


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

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


Цитата megaloman:
Без числа, ИМХО. Каким образом? "hello world"? "hello world - "?
»
забыл я одно.. пару файлов у меня с цифрами (которые уменьшать не надо.. нужно уменьшать только те числа, которые в конце имени).
Пусть в скрипте я буду указывать все символы до числа (которое нужно уменьшать)...
пример.. для файлов
1 - "hello world - 15"
2 - "windows 3 - 12"
3 - "guten tag 2 - 25"

В соответствующих скриптах мы будет указывать:
1 - "hello world - "
2 - "windows 3 - "
3 - "guten tag 2 - "

Цитата megaloman:
"-" обязательно обрамляются пробелами " - "? »
В имени файла бывают пробелы, а именно дефис нет, не обязательно, я просто так хотел сделать, но если из - за этих пробелов сложности, я могу без них сделать.. ("hello world-15", "windows 3-12")


Цитата Iska:
Зачем указывать имя без числа, а не просто имя? »
Потому что полностью имя мы не знаем.. (мы не знаем число, которое в конце.. мы знаем только все символы до этого числа).

Цитата Iska:
И с какого тогда числа начинать перебор значений в сторону уменьшения (пакетные файлы хоть и ограничены, но позволяют манипулировать относительно большими числами)? »
в конце имени файла будет число не больше 30

Цитата Iska:
Зачем указывать в самом пакетном файле, а не параметром пакетного файла? »
Я просто не знаю, как это параметром Мне на самом деле без разницы где указывать, цель - чтобы батник переименовывал указанный файл.. конкретно, чтобы число в конце (именно в конце) имени файла уменьшалось на 1.. если в конце имени файла "0" или вообще числа нету, скрипт просто должен завершиться и ничего не переименовывать.

Последний раз редактировалось Alexander_88, 01-04-2018 в 20:18.


Отправлено: 20:11, 01-04-2018 | #4


Ветеран


Contributor


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

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


Alexander_88,
Не важно, есть ли расширение или дефисы. Важно чтобы файл по указанной маске был единственный. Маска для файла без расширения должна завершаться точкой.
Код: Выделить весь код
@Echo Off

Set "InFile=Z:\Box_In\ok likes 2 - *." 

FOR %%f IN ("%InFile%") DO (Set "Full=%%f" &Set "NFile0=%%~nf"  &Set "Ext=%%~xf")
If "%Full%"=="" Exit /B 2

Set "NFile=%NFile0: =z%"
Set "NFile=%NFile:-=z%"

FOR /L %%i IN (1,1,9999) DO Call Set /A M=1%%NFile:~-%%i%%*10 2>nul ||(Set /A N=%%i &GoTo :Cont)
:Cont
If %N% EQU 1 Exit /B 1

Set /A N=%N%-1

Call Set /A M=%%NFile0:~-%N%%%*1
If %M% EQU 0 Exit /B 0
Set /A M=%M%-1

Call Set "NFile=%%NFile0:~0,-%N%%%%M%%Ext%"

Ren "%Full%" "%NFile%" ||Exit /B 4
Exit /B 0

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


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

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

Отправлено: 21:02, 01-04-2018 | #5


Ветеран


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

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


Цитата Alexander_88:
Я просто не знаю, как это параметром »
Например, вот так:
Скрытый текст


Цитата Alexander_88:
Потому что полностью имя мы не знаем.. (мы не знаем число, которое в конце.. мы знаем только все символы до этого числа). »
Почему не знаете? Вы же его видите?
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:05, 01-04-2018 | #6


Ветеран


Contributor


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

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


Alexander_88,
Вот батник. Если Вы сделаете на него на рабочем столе иконку, то, затягивая в проводнике файл на нее, получите нужный результат с переименованием.
Либо можете распорядиться этим батником и файлом как это показал Iska
Код: Выделить весь код
@Echo Off

Set "Full=%~1" 
Set "NFile0=%~n1"  
Set "Ext=%~x1"

Set "NFile=%NFile0: =z%"
Set "NFile=%NFile:-=z%"

FOR /L %%i IN (1,1,9999) DO Call Set /A M=1%%NFile:~-%%i%%*10 2>nul ||(Set /A N=%%i &GoTo :Cont)
:Cont
If %N% EQU 1 Exit /B 1

Set /A N=%N%-1

Call Set /A M=%%NFile0:~-%N%%%*1
If %M% EQU 0 Exit /B 0
Set /A M=%M%-1

Call Set "NFile=%%NFile0:~0,-%N%%%%M%%Ext%"

Ren "%Full%" "%NFile%" ||Exit /B 4
Exit /B 0

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


Последний раз редактировалось megaloman, 01-04-2018 в 21:26.

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

Отправлено: 21:14, 01-04-2018 | #7


Ветеран


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

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


Цитата Iska:
Почему не знаете? Вы же его видите? »
Этот бат я буду запускать не в ручную... его будет запускать другой скрипт, также этот скрипт будет менять файлы, поэтому никогда не знаешь, какое там будет число.

megaloman, Спасибо, я проверил, у меня все работает, кроме файлов, в имени которых есть цифры.
Цитата Alexander_88:
забыл я одно.. пару файлов у меня с цифрами (которые уменьшать не надо.. нужно уменьшать только те числа, которые в конце имени). »
например такой файл
"ok likes 2 - 15"

В скрипте указал "C:\ok likes 2 - *."

после применения бата, файл стал называться
"ok likes 2 -14"

при последующих запусках конечное число начинает увеличиваться. ("ok likes 2 -14", "ok likes 2 -15", "ok likes 2 -16" и т.д.)

Отправлено: 22:05, 01-04-2018 | #8


Ветеран


Contributor


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

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


Цитата Alexander_88:
при последующих запусках конечное число начинает увеличиваться. ("ok likes 2 -14", "ok likes 2 -15", "ok likes 2 -16" и т.д. »
Не верю! Проверил, работает. Переименуйте свой батник в txt и прикрепите его к сообщению.

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


Отправлено: 22:13, 01-04-2018 | #9


Ветеран


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

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


Вложения
Тип файла: txt limit.txt
(567 байт, 15 просмотров)

Цитата megaloman:
при последующих запусках конечное число начинает увеличиваться. ("ok likes 2 -14", "ok likes 2 -15", "ok likes 2 -16" и т.д. » »
Да это лишнее наболтал, дефисы в бате забыл поставить..

Получается так

Цитата Alexander_88:
после применения бата, файл стал называться
"ok likes 2 -14" »
А потом после последующих запусков ничего не происходит, я полагаю из - за того, что удалился пробел перед числом.
Возможно, как то не полностью я в бате исправил что - то (прикрепил).

Отправлено: 22:31, 01-04-2018 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Синтаксическая ошибка в имени файла, имени папки или метке тома Maestro Deno Microsoft Windows 7 8 05-03-2017 19:21
Доступ - Синтаксическая ошибка в имени файла, имени папки или метке тома Maestro Deno Microsoft Windows 7 1 05-03-2017 16:18
CMD/BAT - [решено] Созд.*.txt по имени файла, с перемещением *.txt и файла в папку с именем файла. OSArev Скриптовые языки администрирования Windows 2 30-01-2011 11:58
[решено] Получить максимальное число (в имени файла) D_Master AutoIt 2 11-06-2009 19:03
[решено] Как уменьшить скорость вращения (число оборотов) вентилятора на процессоре dsl Разгон, охлаждение и моддинг 6 18-01-2009 15:39




 
Переход