Помогите подредактировать bat-ник

Вопросы по программированию, не подходящие в другие разделы.

Модераторы: Naeel Maqsudov, C_O_D_E

Ответить
Аватара пользователя
Timofey
Сообщения: 32
Зарегистрирован: 28 апр 2006, 11:42
Откуда: Владивосток
Контактная информация:

Доброе время суток!

Мне надо сделать, чтобы без особых напрягов в нужном файле выводился список папок в котором пути корневых папок относительно обрабатываемой начинались с минуса. Остановился на bat-никах, как на самом простом и быстром в работе.
Например, обрабатываем папку С:\Temp\

правильные пути:
С:\Temp\-tmp1\
С:\Temp\-tmp1\folder1\
С:\Temp\-tmp1\-folder-2\
С:\Temp\-tmp2\folder3\folder\
С:\Temp\-tmp3\folder\

не правильные пути:
С:\Temp\tmp1\
С:\Temp\folder1\-folder1\
С:\Temp\tmp-1\-folder-2\
С:\Temp\Temp\Temp\Temp\-folder\

Постарался объяснить как можно доходчивее и правильнее, если что уточняйте.
Этот код выводит все папки из папки C:\Temp\:

del out.txt
for /r C:\Temp\ %%i in (.) do echo %%i >> out.txt

Пробовал варьировать параметр в скобках, но или ничего не работало, или работало не правильно: (C:\-*.), (-*.)

Буду благодарен за подсказку.
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

for /r /d %%i in (-*) do echo %%i >> out.txt

не то?
Изображение
Аватара пользователя
Timofey
Сообщения: 32
Зарегистрирован: 28 апр 2006, 11:42
Откуда: Владивосток
Контактная информация:

К сожалению нет.
Во-первых здесь не указана папка которую надо обрабатывать и обрабатывается та в которой лежит *.cmd, во-вторых данный код выводит все пути в которых содержится "-", а мне надо так: если обрабатывается папка "C:\tmp\", то мне надо вывести пути всех папок "C:\tmp\-*", другие "минусы" меня не интересуют.
Данной задачей у меня занимался xStarter, но он работает медленно и начал загонять, т.е. перестал это делать вообще. Я решил всё это дело сделать надёжнее, проще, и быстрее, через CMD.
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Нашёл такое решение:

del out.txt
for /r C:\tmp\ %%i in (.) do echo %%i >> out.txt
findstr /b /i /c:"C:\\tmp\\-" out.txt >> exit.txt

Остаётся подредактировать по мелочи и всё готово. Не нравится, что в несколько заходов делается, ещё точки в конце путей надо убирать...
Для чего мне это нужно? Резервная копия документов. У небольшой компании есть сервер с общедоступной папкой, если кто-то удалит документ, то восстановить проблематично, хороший выход - backup. Все документы этого диска копировать не имеет смысла (~50 Gb), по-этому я сделал так, что резервируются только те папки в названии которых в самом начале стоит "-" (логичнее конечно наоборот, но если понасаздают всяких левых папок, то они будут резервироваться, а так юзвери будут осознанно ставить "-"). Ещё одна причина по которой выбран "-" - это то что папки в WinXP сортируются по имени, при этом знак минуса в названии при сортировке игнорируется. Например, "-Новая папка" будет рядом с "Новая папка", но "+Новая папка" или "#Новая папка" будут в самом начале списка.
Потом, файл со списком папок подсовывается WinRAR и у меня получается 2-3 Gb архив с 4-5 Gb нужной инфы на одном из сетевых компьютеров.
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
А если честно, я .....ся подгонять всё под нужый формат. Так ничего путнего и не получилось...
Напишу консольку на Си.
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

а не проще было сразу архивировать раром только то что надо?
Изображение
Аватара пользователя
Timofey
Сообщения: 32
Зарегистрирован: 28 апр 2006, 11:42
Откуда: Владивосток
Контактная информация:

Игорь Акопян писал(а):а не проще было сразу архивировать раром только то что надо?
Опять же, нет. Пробовал с разными ключами рар (скажу, что ключей используемых для создания этих копий в раре порядка 12-15 штук), но он не может отобрать то что мне надо. А так как список папок может меняться каждый день (люди то работают на работе :) ) , то надо чтобы это делалось автоматически. В конце концов у меня запускается рар, делающий резервный архив по списку путей, который сейчас создаётся консолькой.
Если честно, то мне тоже не нравится эта цепочка: одна программа запускает по расписанию файл .cmd который лежит там-то, который в свою очередь запускает консольку, которая лежит там-то и потом запускается рар, который создаёт резервную копию. Вот и хотел всё впихнуть в .cmd чтобы запускать и не задумываться о том что и где лежит.
Но не хочет .cmd работать как надо!!! Ну, никак!!!
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

эээ
rar a -r qwe c:\temp\-*
Изображение
Ответить