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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    GreaseOD

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

    Цитата:
    Код:@Echo Off  
    regedit /ea dom.reg "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\"  
    Set dName=""  
    For /F "tokens=1-2 delims==" %%a In (dom.Reg) Do Call :_P %%a %%b  
    Echo %DName%  
    GoTo :EOF  
     
    :_P  
    If /i %1 == "DefaultDomainName" Set DName=%2  
    GoTo :EOF  

     
    Спасибо огромное. Это работает. Супер
     
     

    Всего записей: 30 | Зарегистр. 10-08-2006 | Отправлено: 17:20 13-07-2007
    Elroir



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

    Цитата:
    Есть небольшая задачка. Есть такой сервис - Rapidshare.com. После загрузки файла он временно блокирует Ваш IP. Как батником проверить, есть ли Ваш IP в этом списке?  

    Это достаточно сложно. Выяснить это можно только попробовав скачать следующий файл - если нарвался на "Ждите Х минут", значит IP надо менять. Сходу у меня не получилось - я curl-ом пробовал нажать "Free" на страничке закачки, если бы получилось - можно было бы с помощью find искать строчку "You have reached the download-limit" и по результату решать, что делать. У меня не получилось подобрать URL который бы имитировал нажатие кнопки "Free". Надо проконсультироваться у кого-нибудь, кто знает HTML.  


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 00:16 14-07-2007 | Исправлено: Elroir, 00:18 14-07-2007
    mitrichbel

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте! У меня вот какая задача нарисовалась
    Есть много текстовых файлов. Надо в каждом из них:
    1. Удалить пустые строки
    2. Удалить все строки, в которых есть конкретное (одно и то же для всех файлов) слово
     
    И было бы очень здорово, если бы потом даты изменения файлов остались прежними, а не сменились на сейчас.  
     
    Такое возможно вообще? Или нужен отдельный софт?

    Всего записей: 1372 | Зарегистр. 30-04-2003 | Отправлено: 01:10 14-07-2007
    Nagual



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

    Код:
      var clickFreeButton = function()
      {
        var input = document.getElementsByTagName('input')
        for(var i in input)
        {
          if(input[i].type == 'submit' && input[i].value.toLowerCase() == 'free')
          {
            input[i].click();
            return true;
          }
        }
         
        return false;
      };

    вот код

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 02:30 14-07-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Nagual
    Я имел в виду нечто другое - информацию (в том числе и "нажатие" кнопки) можно передавать прямо через URL. Например - у меня раутер управляется через веб-интерфейс и на одной из страниц есть кнопки Connect и Disconnect. Из батника я запускаю строчки:
    curl http://192.168.1.1/status.cgi?disconnect="Disconnect"
    curl http://192.168.1.1/status.cgi?connect="Connect"
    и это имитирует нажатие этих кнопок.
    То же самое надо сделать для кнопки "Free" на страничке rapidshare.

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 03:07 14-07-2007
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Elroir
    Видимо на Rapidshare не поддерживается посылание запроса ссылкой, там определяется нажатие кнопки (по событию).
     
    Приведённый код Nagual это javascript (кстати, очень похож на кусок кода с файла rapidshare_com.js для Opera ), не знаю может ли curl вызывать подобный код (предварительно перейти на страницу rapidshare.com).


    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 03:41 14-07-2007
    Elroir



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

    Цитата:
    Видимо на Rapidshare не поддерживается посылание запроса ссылкой

    Видимо да - наверно используется метод post (данные передаются в теле запроса).
    Правда в некоторых системах можно пользоваться обоими методами (post и get).

    Цитата:
    может ли curl вызывать подобный код  

    Насколько я знаю - не может.


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 03:47 14-07-2007
    Tipulatoid



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

    Код:
    @echo off
     
    for /f "tokens=*" %%a in ('dir *.ext1 /b /a:-d /o:d') do set newfile1=%%a
    copy %newfile1% %cd%\out > nul
    for /f "tokens=*" %%a in ('dir *.ext2 /b /a:-d /o:d') do set newfile2=%%a
    copy %newfile2% %cd%\out > nul
     
    set ftp_adress=ftp.narod.ru
    set ftp_login=qwerty
    set ftp_password=qazwsx
     
    echo %ftp_login%>upload.del
    echo %ftp_password%>>upload.del
    echo cd>>upload.del
    echo dir1>>upload.del
    echo put %newfile1%>>upload.del
    echo cd>>upload.del
    echo dir2>>upload.del
    echo put %newfile2%>>upload.del
    echo quit>>upload.del
     
    ftp -i -v -s:upload.del %ftp_adress%
    del /q upload.del>nul
     

     
    выделенные жирным значения замени на свои. Если что не ясно или не работает, пиши.

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 06:39 14-07-2007 | Исправлено: Tipulatoid, 06:40 14-07-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    mitrichbel
    Скачай утилиту "NIRCMD", скопируй в папку WINDOWS и запусти этот код:

    Код:
     
    @echo off
    REM chcp 1251>nul
    set folder=c:\test
     
    for /f "tokens=1,2,4*" %%a in ('dir /t:w "%folder%\*.txt" ^| find /i "txt"') do (
    if "%%d"=="" (
    call:mod %%a %%b %%c) else (call:mod %%a %%b "%%c %%d")
    )
     
    pause
    goto :eof
     
    :mod
    set m_time=%~1 %~2:00
    set m_time=%m_time:.=-%
    if exist %folder%\tmp.txt del /f /q tmp.txt
     
    for /f "delims=" %%f in (
    'more "%folder%\%~3"') do echo %%f | findstr /i /v /c:"ненужный текст">> %folder%\tmp.txt
     
    del /f /q "%folder%\%~3"
    ren %folder%\tmp.txt %3
    nircmd setfiletime "%folder%\%~3" "" "%m_time%"
     

     
    Путь и ненужное слово заменишь на свои(выделено жирным). Если есть файлы с кириллицей, то удали во второй строчке оператор "REM".
     
    Добавлено:
    newhome

    Цитата:
    Например, заменить в 3 строчке 4 слово "word.001" на "word.002") не с помощью sbs2.com

     
    А использовать sbs2.com религия не позволяет? Есть и другие утилиты для замены подстрок в тексте, например "GSAR"( синтаксис:  
    gsar.exe -r"old_text" -s"new_text" -o test.txt )
     
    Ну, а если ты, всё-таки хочешь исключительно встроенными средствами, то можно так:
     
    Вариант 1, для всех строк

    Код:
     
    @echo off
     
    for /f "delims=" %%a in (test.txt) do (
    echo %%a | findstr /i /c:"word.001">nul
    if errorlevel 1 (
    echo %%a>> out.txt) else (
    for %%b in (%%a) do (
    if /i "%%b"=="word.001" (
    echo | set /p= word.002>> out.txt) else (Echo | set /p=%%b>> out.txt)
    )
    echo.>> out.txt)
    )
     
    del /f /q test.txt
    ren out.txt test.txt
     

     
    Вариант 2 для 3-ей строки:

    Код:
     
    @echo off
    set count=0
     
    for /f "delims=" %%a in (test.txt) do call :subrout "%%a"
    del /f /q test.txt
    ren out.txt test.txt
    goto :eof
     
    :subrout
    set /a count+=1
     
    if %count% equ 3 (
    for %%b in (%~1) do (
    if /i "%%b"=="word.001" (
    echo | set /p= word.002>> out.txt) else (Echo | set /p=%%b>> out.txt)
    )
    echo.>> out.txt
     ) else (echo %~1>> out.txt)
     

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 09:59 14-07-2007 | Исправлено: Maza Faka, 12:05 14-07-2007
    NIKZZZZ



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

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Nagual
    Я поторопился с утверждением, что curl не умеет делать такие запросы.
    Вот код:

    Код:
    @echo off
    setlocal enabledelayedexpansion
    for /f "tokens=3 delims== " %%a in ('curl -s %~1 ^| find "form action"') do (
    curl -s -d "dl.start=Free" %%~a | find "Download via">nul
    if not !errorlevel!==0 set "blacklist=yes"
    )
    if defined blacklist (echo IP is blacklisted) else (echo Everything is OK)

    Ссылка на файл передается аргументом командной строки. То есть так:
    check_rapid.cmd http://rapidshare.com/files/12345678/File.ext
     
    Добавлено:
    Если дан неправильный линк или файл удален - батник все равно выдаст ответ "Все ОК".
    Если надо, я добавлю дополнительную проверку.

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 17:03 14-07-2007
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    Большое спасибо. Не знал, что curl такое сможет. Сделал рапидокачалку - полный автомат.  

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 20:16 14-07-2007
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    звучит воодушевляюще
    NIKZZZZ
    выкладай

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 07:32 15-07-2007 | Исправлено: Nagual, 07:33 15-07-2007
    Lutvun



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как узнать имя компютера и пользователя через бат файл?

    Всего записей: 286 | Зарегистр. 22-11-2005 | Отправлено: 12:45 15-07-2007
    Elroir



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

    Код:
     
    echo %COMPUTERNAME%
    echo %USERNAME%
     


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 13:32 15-07-2007
    NIKZZZZ



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

    Цитата:
    выкладай

    Да выкладывать то особо нечего, я взял немного доработанный Universal Share Downloader и добавил в него проверку IP на черный список с автоматическим переключением IP перед получением прямой ссылке. Если интересно, пиши в ПС, а то это   .
    В принципе, можно написать батник, который бы это делал, но имеет ли это смысл?

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 13:37 15-07-2007
    Lutvun



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

    Всего записей: 286 | Зарегистр. 22-11-2005 | Отправлено: 14:07 15-07-2007
    mitrichbel

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

    Цитата:
    Скачай утилиту "NIRCMD", скопируй в папку WINDOWS и запусти этот код:  

    получаю "Файл не найден". Закомментил первую строчку и увидел в консоли

    Цитата:
     C:\test>REM @echo off  
     
    C:\test>REM chcp 1251>nul  
     
    C:\test>set folder=c:\test  
     
    C:\test>for /f "tokens=1,2,4*" %%a in ('dir /t:w "%folder%\*.txt" ^| find /i "txt"') do (if "%%d"=="" (call:mod %%a %%b %%c) else (call:mod %%a %%b "%%c %%d" ) )  
     
    C:\test>pause  
    Для продолжения нажмите любую клавишу

    Что поправить?

    Всего записей: 1372 | Зарегистр. 30-04-2003 | Отправлено: 20:28 15-07-2007
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
    ок тогда смысла нет
     
    Народ, вот такая задача возникла
    надо обновить qip батником, так как надоело это делать руками
    в принципе опытным путем было установлено, что в основном меняется файл qip.exe
    начал писать так:
     
    @echo off
    set qip_build=8030
    set qip_host=http://download.qip.ru/
    taskkill /f /im qip.exe
     
    вот точные ссылки на текущий билд
    http://download.qip.ru/qip8030.zip
    http://download.qip.ru/qip8030.rar
     
    то есть примерно так
    "команда загрузки с заменой только файла qip.exe" %qip_host%qip%qip_build%.zip
    "команда загрузки с заменой только файла qip.exe" %qip_host%qip%qip_build%.rar
     
    дальше хотелось бы вашей помощи там, где выделено жирным:
    есть wget и curl
    можно ли одним из них выковырять из архива (zip или rar) на сайте только файл qip.exe
    и заменить им одноименный, лежащий в текущем каталоге?
    если нет, то загрузить полностью архив и распаковать его заменой я смогу и сам
     
    вот код для обновления этого файла с полной загрузкой всего архива
     
    @echo off
    set qip_build=8030
    set qip_host=http://download.qip.ru/
    wget %qip_host%qip%qip_build%.rar
    taskkill /f /im qip.exe
    rar x -y -nqip.exe "qip%qip_build%.rar"
    ::rar x -y "qip%qip_build%.rar" LI . rem так обновляем папку с языками
    ::rar x -y "qip%qip_build%.rar" LI\langs.cfg . rem так обновляем файл внутри папки
    if exist "qip%qip_build%.rar" del /f/q "qip%qip_build%.rar"
    start "" qip
     
    а хотелось бы грузить только файл qip.exe
    хотя трафик у меня безлимитный, но все же оптимизация нужна в любом случае
     
    а в идеале бы еще проверять версию обновления на сайте

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 01:09 16-07-2007 | Исправлено: Nagual, 04:36 16-07-2007
    ViSiToR



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

    Цитата:
    можно ли одним из них выковырять из архива

    Не думаю, нужен внешний архиватор... если есть 7z, то отлично подходит, если нет, тогда можно и rar.exe...
     

    Код:
    Set Archivator=%ProgramFiles%\7-Zip\7z.exe
     
    %Archivator% e  -o. qip.exe -r

     


    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 01:44 16-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