Показать полную графическую версию : [решено] Уменьшить число в имени файла
Alexander_88
01-04-2018, 16:43
Здравствуйте. Можно ли сделать такой бат, который будет переименовывать конкретный файл?.. но не стандартно переименовывать, а вот так....... при запуске батника, цифра в имени нужного файла (который я сам укажу), должна уменьшиться на 1.
Известно что
Цифра находится в конце имени файла.. больше цифр в имени нету.. ни в середине, ни в начале.
Расширения у файла нету.
Известно имя файла (кроме цифры в конце имени).
В папке будут множество файлов, нужно переименовывать не все, а только нужный.
К примеру нужный нам файл "hello world - 15" (в скрипте мы должны указать его имя без цифры)
после запуска bat файла, этот нужный нам файл должен называться "hello world - 14"
если еще раз запустить бат файл, нужный файл будет называться "hello world - 13"
и т.д.
Если дойдет до нуля, т.е. файл будет с именем "hello world - 0", то ничего не должно происходить.
:)
megaloman
01-04-2018, 19:09
К примеру нужный нам файл "hello world - 15" (в скрипте мы должны указать его имя без цифры) »Без числа, ИМХО. Каким образом? "hello world"? "hello world - "?
"-" обязательно обрамляются пробелами " - "?
цифра в имени нужного файла »
К примеру нужный нам файл "hello world - 15" »
Тогда не «цифра». Число.
(в скрипте мы должны указать его имя без цифры) »
Зачем указывать в самом пакетном файле, а не параметром пакетного файла? Зачем указывать имя без числа, а не просто имя? И с какого тогда числа начинать перебор значений в сторону уменьшения (пакетные файлы хоть и ограничены, но позволяют манипулировать относительно большими числами)?
Alexander_88
01-04-2018, 20:11
Без числа, ИМХО. Каким образом? "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 - "
"-" обязательно обрамляются пробелами " - "? »
В имени файла бывают пробелы, а именно дефис нет, не обязательно, я просто так хотел сделать, но если из - за этих пробелов сложности, я могу без них сделать.. ("hello world-15", "windows 3-12")
Зачем указывать имя без числа, а не просто имя? »
Потому что полностью имя мы не знаем.. (мы не знаем число, которое в конце.. мы знаем только все символы до этого числа).
И с какого тогда числа начинать перебор значений в сторону уменьшения (пакетные файлы хоть и ограничены, но позволяют манипулировать относительно большими числами)? »
в конце имени файла будет число не больше 30
Зачем указывать в самом пакетном файле, а не параметром пакетного файла? »
Я просто не знаю, как это параметром :) Мне на самом деле без разницы где указывать, цель - чтобы батник переименовывал указанный файл.. конкретно, чтобы число в конце (именно в конце) имени файла уменьшалось на 1.. если в конце имени файла "0" или вообще числа нету, скрипт просто должен завершиться и ничего не переименовывать.
megaloman
01-04-2018, 21:02
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
Я просто не знаю, как это параметром »
Например, вот так:
https://i.imgur.com/YE4VFtY.png
Потому что полностью имя мы не знаем.. (мы не знаем число, которое в конце.. мы знаем только все символы до этого числа). »
Почему не знаете? Вы же его видите?
megaloman
01-04-2018, 21:14
Alexander_88, @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
Alexander_88
01-04-2018, 22:05
Почему не знаете? Вы же его видите? »
Этот бат я буду запускать не в ручную... его будет запускать другой скрипт, также этот скрипт будет менять файлы, поэтому никогда не знаешь, какое там будет число.
megaloman, Спасибо, я проверил, у меня все работает, кроме файлов, в имени которых есть цифры.
забыл я одно.. пару файлов у меня с цифрами (которые уменьшать не надо.. нужно уменьшать только те числа, которые в конце имени). »
например такой файл
"ok likes 2 - 15"
В скрипте указал "C:\ok likes 2 - *."
после применения бата, файл стал называться
"ok likes 2 -14"
при последующих запусках конечное число начинает увеличиваться. ("ok likes 2 -14", "ok likes 2 -15", "ok likes 2 -16" и т.д.)
megaloman
01-04-2018, 22:13
при последующих запусках конечное число начинает увеличиваться. ("ok likes 2 -14", "ok likes 2 -15", "ok likes 2 -16" и т.д. » Не верю! Проверил, работает. Переименуйте свой батник в txt и прикрепите его к сообщению.
Alexander_88
01-04-2018, 22:31
при последующих запусках конечное число начинает увеличиваться. ("ok likes 2 -14", "ok likes 2 -15", "ok likes 2 -16" и т.д. » »
Да это лишнее наболтал, дефисы в бате забыл поставить..
Получается так
после применения бата, файл стал называться
"ok likes 2 -14" »
А потом после последующих запусков ничего не происходит, я полагаю из - за того, что удалился пробел перед числом.
Возможно, как то не полностью я в бате исправил что - то (прикрепил).
megaloman
01-04-2018, 22:38
Alexander_88, Ом мани падме хум! Я виноват. У меня была эта ситуация, я её исправил, каким образом старый вариант попал в пост - ума не приложу. Смотрите исправленный вариант.
Кстати, во втором решении этого косяка уже не было
Alexander_88
01-04-2018, 23:39
Alexander_88, Ом мани падме хум! Я виноват. У меня была эта ситуация, я её исправил, каким образом старый вариант попал в пост - ума не приложу. Смотрите исправленный вариант.»
Спасибо, скопировал отредактированный вариант, и теперь все работает.
Кстати, во втором решении этого косяка уже не было »
Я второй вариант не пробовал.. :blush2: как я понял он для перетягивания файла на иконку, но у меня просто скрипт работает, который данный батник запускает. :)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC