Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 3

Модерирует : KLASS, IFkO

vu1tur (11-09-2007 15:22): продолжаем в теме Задачи на bat-файлах 4  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99

   

vu1tur



Moderator-Saaber
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Задачи на bat-файлах
(часть 1, часть 2)
Вопросы, задачи и их решения по работе с командными файлами, а также сопутствующие ссылки.

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
 
Дополняем шапку: добавляем готовые решения, полезные ссылки.
 
Примечание: Большие куски кода заключайте в тэг [more]  
 
Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Программы » Командная строка, батники\сценарии
 
Полезные ссылки
 
Полезные утилиты
 
Готовые решения и частые вопросы:
  • Встроенный справочник по командам
  • Создание помощи по всем командам консоли 2000 и XP
  • Альтернативные решения »
  • Работа с текстом, датой, и файлами »
  • Администрирование, автоматизация и сеть »
  • Работа с переменными и параметрами ком. строки »
     
    Описания работы команд и символов участниками темы:
    · setlocal enabledelayedexpansion и переменные окружения
    · символы & и && в командной строке
    · Переменная %0

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 11:54 27-04-2007 | Исправлено: Elroir, 03:59 10-09-2007
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mitrichbel
    Быстро удалить все пустые с строки можно с помощью SBS2

    Код:
    sbs2.com 0 "$0d$0a$0d$0a" "" < file.txt > tmp.txt
    type tmp.txt | find /i /v "ненужный текст" >file.txt

     
     
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 17:30 18-07-2007
    mitrichbel

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    сходу нашёл http://main.rtfiber.com.tw/~changyj/sed/html/p.20060717a.html
     
    Добавлено:
    NIKZZZZ
    что такое SBS2?? В "Полезных утилитах" в шапке не нашёл, поисковики выдают много шума и ссылки на упоминания sbs2 в этом топике (без подробностей).. Заговор какой-то)

    Всего записей: 1371 | Зарегистр. 30-04-2003 | Отправлено: 17:32 18-07-2007
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Быстро удалить все пустые сроки в отдельно взятом файле просто:

    Код:
     
    for /f "delims=" %%i in ('type %1') do (
        echo %%i >>new%1
            del %1
        )
     

     
    если нужно перебрать категорию файлов то добавить поверх этого еще один цикл, а нынешний вызывать при помощи call

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 19:26 18-07-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mitrichbel
    В шапке, в разделе "Готовые решения и частые вопросы" - "Работа с текстом, датой, и файлами". Прямая ссылка - http://forum.ru-board.com/topic.cgi?forum=2&topic=2922&start=16&limit=1
     
    01MDM
    Это уже предлагали. Основные проблемы - некорректная обработка спец. символов и медленная работа на больших файлах.

    ----------
    "В интернете есть все, но не всегда"

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 19:37 18-07-2007
    vmix



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вот такая задача стоит: на сильно удаленном компе REM требуется регулярно перемещать из папки в папку кучу файлов, что очень муторно.  
     
    Хочу сделать так: запускаю на REM батник REM_FS, создающий список файлов rem_fs.txt и выкладываю на ФТП, затем на локальном компе LOC беру с ФТП rem_fs.txt и обрабатываю его батником MAKE_FS, создающий прообраз файловой системы удаленного компа (директории и файлы нулевого размера).  
     
    Затем чел на локальном компе открывает проводничком этот прообраз и мышкой работает с файлами-пустышками, и как закончит, запускает батник LOC_FS, создающий loc_fs.txt и выкладывает на ФТП.  
     
    На удаленном компе по расписанию запускается батник CHANGE_FS, который забирает с ФТП файл change_fs.txt и обрабатывает его, то есть производит изменения файловой системы на удаленном компе.
     
    Если с  REM_FS и LOC_FS все понятно (dir /S /A:D /B c:\MyDir >rem_fs.txt), то как сделать MAKE_FS и CHANGE_FS для меня непонятно..
     
    Заранее спасибо за помощь.

    Всего записей: 162 | Зарегистр. 22-10-2002 | Отправлено: 19:38 18-07-2007
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mitrichbel

    Цитата:
    что такое SBS2?

    Вот описание
    sbs2.com

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 19:50 18-07-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    mitrichbel
    Решение твоей задачи при помощи AutoIT подойдёт? Если да, то давай обсудим в PM.
       Кстати проверь PM, я тебе кинул примерчик, если что-то не понятно пиши в личку!

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 19:56 18-07-2007
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir

    Цитата:
    некорректная обработка спец. символов

     
    Я уже спрашивал здесь о "!" и "="
     
    Решения нет до сих пор.
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 19:58 18-07-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    vmix
    Ты как-то очень запутанно написал...
    Откуда взялся файл change_fs.txt, если создавались и перемещались на ftp только rem_fs.txt  и loc_fs.txt?

    Цитата:
    Если с  REM_FS и LOC_FS все понятно (dir /S /A:D /B c:\MyDir >rem_fs.txt)

    Эта команда выдаст только структуру директорий, без файлов. Я так понимаю, что и файлы нужны?
     
     
    Добавлено:
    01MDM
    Я помню этот код - решение для него вряд-ли будет. Если знак "!" еще можно победить, то знак "=" - никак. Команда "set /p=" не воспринимает "=".

    ----------
    "В интернете есть все, но не всегда"

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 20:22 18-07-2007
    vmix



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    Согласен, несколько запутанно, и change_fs.txt здесь лишний и REM_FS.BAT должен быть (dir /S /B c:\MyDir >rem_fs.txt) - поторопился, извиняюсь.  
    Но смысл такой: на удаленном компе снимается структура файлов с полными путями и высылается на локальный. Здесь воссоздается образ, на нем делают изменения структуры файлов и эти изменения должны отработаться на реальной структуре удаленного компа. Я не знаю как создать директории и файлы по списку rem_fs.txt и как переместить файлы согласно нового списка loc_fs.txt
    Спасибо.

    Всего записей: 162 | Зарегистр. 22-10-2002 | Отправлено: 20:47 18-07-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    vmix
    Еще уточнение - когда я на локальном компе получаю список файлов, мне надо создать ту же самую структуру на локальном диске или в локальной директории?
    Поясню - получили c:\test\dir1\file1, c:\test\dir2\file2. Надо создать файлы на локальном диске C: в этих же директориях или выкинуть букву диска и создать всю структуру в той директории, где я сейчас нахожусь - например d:\dir3. И тогда структура получится  d:\dir3\test\dir1\file1, d:\dir3\test\dir2\file2 ?


    ----------
    "В интернете есть все, но не всегда"

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 22:11 18-07-2007
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    У меня gsar выдаёт ошибку при попытке заменить текст со слэшем     \       . Что можно сделать? Использую так:

    Код:
    gsar.exe -s"старый текст \старый текст" -r"новый текст\новый текст" -o "1.txt

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 22:35 18-07-2007 | Исправлено: king_stiven, 22:37 18-07-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    Вместо "\", ставь ":134" ":092".

    Код:
     
    gsar.exe -s"старый текст :092старый текст" -r"новый текст:092новый текст" -o "1.txt  
     

     
    Добавлено:
    Ошибся - не 134, а 092

    ----------
    "В интернете есть все, но не всегда"

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 23:52 18-07-2007 | Исправлено: Elroir, 23:55 18-07-2007
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir

    Цитата:
    Вместо "\", ставь ":134" ":092".  

    Не получится, так как слэш подставляется с текстом из переменной. Попробовал  
    replacer, заменяет корректно. Буду ещё её тестить на остальные символы  !   % и т.д.
     
     
     

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 00:10 19-07-2007
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven

    Цитата:
    Не получится, так как слэш подставляется с текстом из переменной.  

    кто ж мешает перед вызовом заменить в переменной слэш на ":092" ??
    заодно с другими недопустимыми символами
    set "var=%var::=:058%"  
    set "var=%var:\=:092%"  
    set "var=%var:"=:034%"  
     
    mitrichbel
    я тут посмотрел сколько накопилось рабочих строк в конфигах моего чистильщика текстов - оказалось в сумме 33 замены с вызовом gsar и несколько раз вызывается sed - у которого в сумме конфигов на 55 разных строк поисков/замен.
    мегабайтный файл перелопачивается секунд 10-15 (АМД2500).
    Удаление лишних разрывов строк и вставка нужных в эти 88 строк конфигов понятно входит, так что мне сложно понять - как можно довести батник простых замен до состояния

    Цитата:
    Выполнялся батник очень долго - около часа (AMD 2200, 512Mb, XP) разбирался с двумя десятками файлов общим объёмом в мегабайт.
    чего там может занимать СТОЛЬКО времени...

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 01:30 19-07-2007 | Исправлено: wolf0425, 02:07 19-07-2007
    mitrichbel

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    Блок-схему или описание я бы ещё понял, но этот код - нет, не умею :/

    Всего записей: 1371 | Зарегистр. 30-04-2003 | Отправлено: 10:57 19-07-2007
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425

    Цитата:
    кто ж мешает перед вызовом заменить в переменной слэш на ":092" ??  
    заодно с другими недопустимыми символами  
    set "var=%var::=:058%"  
    set "var=%var:\=:092%"  
    set "var=%var:"=:034%"  

    У меня не получается, делал так:

    Код:
    for /f "usebackq tokens=*" %%d in (`dir "%%c\*.mp3" /o /b /s /a:-d`) do (
                    set "%%~dpc=%%%~dpc:\=:092%"
                    echo %%d>1.txt
                    echo %%~dpc>2.txt
                    for /f "usebackq tokens=*" %%g in ("2.txt") do (
                        gsar.exe -f -s"%%g" -r"%новый текст%" -o 1.txt 3.txt
     

    делал и так

    Код:
    setlocal enabledelayedexpansion        
                for /f "usebackq tokens=*" %%d in (`dir "%%c\*.mp3" /o /b /s /a:-d`) do (
                    set "%%~dpc=!%%~dpc:\=:092!"
                    echo %%d>1.txt
                    echo %%~dpc>2.txt
                    for /f "usebackq tokens=*" %%g in ("%temp%\2.txt") do (
                        gsar.exe -f -s"%%g" -r"%новый текст%" -o 1.txt 3.txt
     

    С replacer, вроде бы всё получается корректно на всех знаках.

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 11:30 19-07-2007
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mitrichbel а какое место кода непонятно?

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 11:36 19-07-2007
    mitrichbel

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    я вообще незнаком, по сути

    Всего записей: 1371 | Зарегистр. 30-04-2003 | Отправлено: 11:40 19-07-2007
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven внутри for  последовательные действия с переопределением %переменных% делать нельзя, можно только с !переменными! (а у тех - свои ограничения).
    так что для таких множественных замен проще всё действие из for выносить с помощью call.
     
    а set "%%~dpc=%%%~dpc:\=:092%" - вообще ересь, %%~c переопределять невозможно, будет переопределяться переменная с именем равным значению (~функции!) %%~dpc
     
    т.е., если я правильно понял что ты хотел сделать - выглядеть должно так

    Код:
     setlocal enabledelayedexpansion        
    for /f "usebackq tokens=*" %%d in (`dir "%%c\*.mp3" /o /b /s /a:-d`) do (
    set "tempvar=%%~dpc"
    echo %%d>1.txt
    gsar.exe -f -s"!tempvar:\=:092!" -r"%новый текст:\=:092%" -o 1.txt 3.txt
    )
     
    %новый текст% я посчитал где-то ранее определнной переменной.
     

    Цитата:
    С replacer, вроде бы всё получается корректно на всех знаках.

    Ну если работает - смысла переделывать наверно нет, одна утилита ничем не лучше другой.
    насчет всех знаков - подставить реплейсеру <> наверно будут проблемы, не говоря про непечатные спецсимволы, так что бывают случаи когда им не обойдешься.
     
    Добавлено:
    mitrichbel
    Цитата:
    я вообще незнаком, по сути
    ну хоть что-то ты понимаешь (раз вообще взялся писать батник, а не програму на делфи),  
    и про ключик /? у всех встроеных команд cmd - в курсе?
     

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 11:43 19-07-2007 | Исправлено: wolf0425, 12:20 19-07-2007
       

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 3
    vu1tur (11-09-2007 15:22): продолжаем в теме Задачи на bat-файлах 4


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru