Jump to content

Погрызём файлы с расширением bat


MoLoToK
 Share

Recommended Posts

Понадобилось написать программу для backup’инга файлов. Решил, что мне хватит bat’ника.

Сейчас у меня вот так (эта лишь та часть всего алгоритма, которую мне надо усовершенствовать с Вашей помощи):

:poehali
set r=%random%
if exist %r% goto poehali
mkdir %r%

То есть, каталог создаётся по рандомному числу. Если такое число уже генерировалось — этот алгоритм повторяется ещё раз, и таки создаёт новый каталог.

Минус заключается в том, что вот эти рандомные числа не дают понять, в каком порядке были созданы эти каталоги, их нужно упорядочивать по дате создания...

Не подскажете, каким алгоритмом можно сделать так, чтобы названия директорий генерировались не рандомным числом, а чтобы они имели названия по порядку: 001, 002, 003, 004, 005, 006 и так далее?

Link to comment
Share on other sites

Люблю решать задачки на батниках :lol:

Вот что пока получилось

for /f "tokens=*" %%i in ('dir /ad /b') do set dir_last=%%i
set /a dir_new=%dir_last% + 1

через dir выбираем все каталоги и проходим по списку через for

в результате получаем название последнего по алфавиту

ну и через set прибавляем единицу

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

upd

к стати, почему не подходит как название дата создания каталога?

например 20090308

Edited by Tokolist
Link to comment
Share on other sites

Доработал скрипт.

Получаем имя последней по алфавиту директории.

for /f "tokens=*" %%i in ('dir /ad /b') do set dir_last=%%i

Убираем нули ибо set считает числа, начинающиеся с нуля восьмеричными.

set dir_last=1%dir_last%
set /a dir_last = %dir_last% - 1000

Инкремент на единицу.

set /a dir_new=%dir_last% + 1

Создаем директорию с лидирующими нулями в имени.

set dir_new=00%dir_new%
set dir_new=%dir_new:~-3%
md %dir_new%

upd

Кстати, еще надо добавить условие

if '%dir_last%'=='' (set dir_last=000)

ибо изначально каталогов может вообще не существовать...

В итоге получим:

set dir_last=
for /f "tokens=*" %%i in ('dir /ad /b') do set dir_last=%%i

if '%dir_last%'=='' (set dir_last=000)

set dir_last=1%dir_last%
set /a dir_last = %dir_last% - 1000
set /a dir_new=%dir_last% + 1

set dir_new=00%dir_new%
set dir_new=%dir_new:~-3%
md %dir_new%

Edited by Tokolist
Link to comment
Share on other sites

Tokolist, ты просто супер. Я б хрен составил такое, так как лишь недавно понял, что в батниках можно составлять вот такие вот алгоритмы (а не просто вбивать команды, о которых рассказывает /help). Очень добротная информация для твоего 1000-го сообщения. Воистину круто. Спасибо.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy