Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Уменьшить число в имени файла (http://forum.oszone.net/showthread.php?t=334088)

Alexander_88 01-04-2018 16:43 2806515

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

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

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

megaloman 01-04-2018 19:09 2806528

Цитата:

Цитата Alexander_88
К примеру нужный нам файл "hello world - 15" (в скрипте мы должны указать его имя без цифры) »

Без числа, ИМХО. Каким образом? "hello world"? "hello world - "?
"-" обязательно обрамляются пробелами " - "?

Iska 01-04-2018 19:36 2806529

Цитата:

Цитата Alexander_88
цифра в имени нужного файла »

Цитата:

Цитата Alexander_88
К примеру нужный нам файл "hello world - 15" »

Тогда не «цифра». Число.

Цитата:

Цитата Alexander_88
(в скрипте мы должны указать его имя без цифры) »

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

Alexander_88 01-04-2018 20:11 2806535

Цитата:

Цитата 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" или вообще числа нету, скрипт просто должен завершиться и ничего не переименовывать.

megaloman 01-04-2018 21:02 2806544

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


Iska 01-04-2018 21:05 2806545

Цитата:

Цитата Alexander_88
Я просто не знаю, как это параметром »

Например, вот так:
Скрытый текст


Цитата:

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

Почему не знаете? Вы же его видите?

megaloman 01-04-2018 21:14 2806546

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


Alexander_88 01-04-2018 22:05 2806553

Цитата:

Цитата 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" и т.д.)

megaloman 01-04-2018 22:13 2806554

Цитата:

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

Не верю! Проверил, работает. Переименуйте свой батник в txt и прикрепите его к сообщению.

Alexander_88 01-04-2018 22:31 2806558

Вложений: 1
Цитата:

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

Да это лишнее наболтал, дефисы в бате забыл поставить..

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

Цитата:

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

А потом после последующих запусков ничего не происходит, я полагаю из - за того, что удалился пробел перед числом.
Возможно, как то не полностью я в бате исправил что - то (прикрепил).

megaloman 01-04-2018 22:38 2806560

Alexander_88, Ом мани падме хум! Я виноват. У меня была эта ситуация, я её исправил, каким образом старый вариант попал в пост - ума не приложу. Смотрите исправленный вариант.
Кстати, во втором решении этого косяка уже не было

Alexander_88 01-04-2018 23:39 2806568

Цитата:

Цитата megaloman
Alexander_88, Ом мани падме хум! Я виноват. У меня была эта ситуация, я её исправил, каким образом старый вариант попал в пост - ума не приложу. Смотрите исправленный вариант.»

Спасибо, скопировал отредактированный вариант, и теперь все работает.


Цитата:

Цитата megaloman
Кстати, во втором решении этого косяка уже не было »

Я второй вариант не пробовал.. :blush2: как я понял он для перетягивания файла на иконку, но у меня просто скрипт работает, который данный батник запускает. :)


Время: 23:00.

Время: 23:00.
© OSzone.net 2001-