bat-ник для увеличения номера файла

boginya

Имеется набор пронумерованных файлов: solp0.dat, solp1.dat, solp2.dat....
Нужно написать bat-файл, который бы увеличил номер каждого файла на 1.
Подскажите, как это сделать, пожалуйста

lebed853

имхо средствами батников это не делается. попробуй яваскрипт.

uncle17

это делается средствами яваскрипта? :shocked:

lebed853

да, в WSH

FRider

Имелся ввиду Windows Script Host. Для него можно писать на VBScript и JavaScript.

uncle17

а... не пугай так:)

boginya

ёёёё, я надеялся малой кровью. Проще изменить логику программы, которая эти файлы использует(графики по ним строит)
спасибо за реплаи :)
кста, а что, ЯваСкрипт умеет работать с регулярными выражениями (без них тут, вроде, никак)?

Maurog

посимвольной работы со стрингами здесь хватит за глаза

0000

Имхо делается, надо тока Lynn подождать :D

pilot

ЯваСкрипт умеет работать с регулярными выражениями?

Умеет

Andbar

работа единоразовая?
Номера идут по порядку? Длина номеров одинакова?
Тогда можно и батником обойтись, имхо. Но если в цифрах нет ведущих нулей, то не получится (не будет правильно работать сортировка).
Идея: получить список файлов (dir /b >>tmpfile дописать в конец имя, которое должно быть у последнего файла (echo .... >>tmpfile отсортировать по убыванию (sort /r).
Затем в цикле читаем этот файл (for /? каждый раз вызываем ren, параллельно сохраняя в переменной окружения имя, т.е. (нужные параметры для for посмотри сам):
for %%I.... do call :mylabel %%I
goto :eof
:mylabel
if -%save%-==-- goto cont
if -%1-==-.- goto :eof
if -%1-==-..- goto :eof
ren %1 %save%
:cont
set save=%1
goto :eof

sinet

C:\Projects>more 1.bat
FOR /L %%i IN (10000,-1,0) DO @2.bat %%i
C:\Projects>more 2.bat
@set /A J=%1+1
move solp%1.dat solp%J%.dat
Можно сразу список файлов в FOR получать, но это надо help for покурить хорошо.

klyv

я бы добавил проверку, существует ли файл

Andbar

о... всё гениальное - просто.
А зачем два файла?

sergdob

А зачем два файла?
welcome to *.bat world ;)

Andbar

welcome to *.bat world ;)
разве под NT между *.bat и *.cmd есть какое-то отличие?

AlexV769

если в реестр залезть и нашкодничать там - будут.

Andbar

если в реестр залезть и нашкодничать там - будут.
Если уж на то пошло, топикстартер не сказал, что у него за ОС, может у него *nix, а слово "батник" он по привычке использует

kill-still

Круто. =)
Мне понравилось

boginya

Работа единоразовая. Номера обычно от 1 до 9, но могут и двузначные появиться, отсутствие ведущих нулей - да, это проблема. Номера по порядку. Система Windows, так что батник не "по привычке".
Спасибо за посты, у меня тут у самого кое-какие идеи зашевелились, по моему даже проще можно, учитывая структуру имен (solpN.dat).
Только как сделать строчку 'solpN.dat', N - число, хранящееся в переменной I - вот так:
$filename$ = solp%%I.dat
?

Andbar

Тебе уже почти рабочий вариант предложил.

boginya

Тебе уже почти рабочий вариант предложил.

Да, я просто проглядел его. Всё работает. Хелп как-нибудь покурю на досуге.

AlexV769

Мой сканер нумерует получаемые файлы как
Image$n.tif
при этом $n идет без лидирующих нулей.
1) удаляю Image посредством Multi Rename Tool в TC
2) прогоняю через вот такой скрипт:
for /F "usebackq delims=|" %%j in (`dir /b ?.*`) DO @move %%j 00%%j
for /F "usebackq delims=|" %%k in (`dir /b ?.*`) DO @move %%k 0%%k
Совершенно тупо, но работает :)

sinet

Если TC использовать, то в том же Multi Rename Tool есть [C], который и прибавить единичку может, и лидирующие нули добавит. Правда такое прокатит, если нет пропусков в нумерации.

AlexV769

это да :)
а если такую штуку надо провернуть в N директориях, то TC не сможет этого сделать. скрипту же пофигу.

uncle17

а если в одной директории, то умение TC работать с регэкспами не поможет?

AlexV769

не понял тебя.
есть N папок с файлами Image1.tif ... ImageKKKK.tif
как во всех папках с помощью TC привести файлы к виду ZZZZ.tif, где ZZZZ - порядковый номер внутри папки с лидирующими нулями.

uncle17


галка "RegEx" не поможет (в одной папке)? Я ей не пользовался - хз, как именно они там реализованы, просто спрашиваю

AlexV769

Зачем тебе регулярные выражения? Тем более они применяются, как не трудно это видеть, в Search & Replace, которые ты не заполнил.

saveliev_a

Сможет. Сперва поиск, Feed to listbox, Ctrl+M.

AlexV769

А дальше? список файлов и по ctrl+B получить можно, без всякого поиска.

saveliev_a

Если нумерация сплошная, то Counter.
За Ctrl+B спасибо. Знал, но никогда не вспоминал, когда надо было.

AlexV769

Я не просил сквозной нумерации через все каталоги.
фактически мне надо дописать лидирующие нули и только.

saveliev_a

Сортировка по имени. [N1-9]0[N10] и аналогично для 1, 2, 3 ведущих нулей.
Оставить комментарий
Имя или ник:
Комментарий: