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

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

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

vu1tur (29-07-2011 12:47): Задачи на bat-файлах 11
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 100 101 102 103 104 105 106 107 108

   

vu1tur



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

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!! Чтобы не копировались концевые пробелы из форума, жмите на ссылку "Редактировать" в посте, и уже из редактора копируйте батник без пробелов.
 
Также для удаления концевых пробелов пользуйтесь скриптом от Nagual, или VBS-Скрипт-Модулем от ViSiToR.
 
Для перекодирования кирилицы 866<—>1251 пользуйтесь онлайн сервисом Перекодировщик кириллицы

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 11:53 09-01-2011 | Исправлено: mazafakermazafaka, 11:22 04-06-2011
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    res2001
    Дык мой вариант удаляет только каталоги, файлы не трогает.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 14:34 18-01-2011
    inock

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Скажите, можно ли в bat реализовать алгоритм, который на VB выглядел бы примерно так:
     
    Dim ID, sURL, STEPS
    ID=301987
    STEPS= 100
    sURL="http://vegacomp.ru/index.php?productID="
     
    For i=ID To ID+STEPS
            WScript.Echo(sURL & i)
    Next
     
     
    И еще, можно как-то заэкранировать двойные кавычки в команде
     
    find /i "id="zhead""

    Всего записей: 37 | Зарегистр. 06-12-2004 | Отправлено: 14:35 18-01-2011
    user5nov

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Чтобы не путать напишу что нужно от скрипта.
    1. Удалял папки и файлы, но оставлял ярлыки (ссылки на файлы)
    for /R "%UserProfile%\Рабочий стол" %%i in (*.*) do if not %%~xi==.lnk del /F /Q "%%~fi"  
    этот батник отрабаывает но оставляет, папки.
    может совместить их?
     
    clear desktop.bat
    for /R "%UserProfile%\Рабочий стол" %%i in (*.*) do if not %%~xi==.lnk del /F /Q "%%~fi"  
    for /f "tokens=*" %%i in ('dir /b /A:D "%UserProfile%\Рабочий стол" ') do echo rd /s/q "%UserProfile%\Рабочий стол\%%i"  
     
    после выполнения, папки остаются, видимо вторая строчка не отрабатывает.
     
    Добавлено:
    res2001
    Сорри, ошибка моя, всё работает, спасибо большое

    Всего записей: 112 | Зарегистр. 19-10-2005 | Отправлено: 14:40 18-01-2011 | Исправлено: user5nov, 14:49 18-01-2011
    res2001



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

    Цитата:
    И еще, можно как-то заэкранировать двойные кавычки в команде

    find /i "id=""zhead"""

    Цитата:
    Скажите, можно ли в bat реализовать алгоритм, который на VB выглядел бы примерно так:  


    Код:
    @echo off
    set ID=301987
    set STEPS=100
    set sURL="http://vegacomp.ru/index.php?productID="
    set /a "count=ID+STEPS"
    For /l %%i in (%ID%,1,%count%) do Echo.sURL%%i
     

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 15:05 18-01-2011
    inock

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо.
    С первого раза не заработало... Вопрос: вот в этой части:
     

    Код:
     
    For /l %%i in (%ID%,1,%count%) do (
    rem Echo %sURL%%%i
     
    C:\unixutils\wbin\wget.exe "%sURL%%%i" -Ofile.html
     
    find /i "id=""zhead""" file.html
     
    if errorlevel 0 goto end
     
    echo %sURL%%%i >> result.txt
     
    :end
    )

     
    можно как-то сделать, чтобы работало, несмотря на наличие условного перехода? А то call'ить другой батник с параметром %sURL%%%i как-то... Ну, во всяком случае тормознуто получится...
     
     
     
    P.S: Отбой тревоги. Вот так заработало:
     

    Код:
     
    For /l %%i in (%ID%,1,%count%) do (call :wget %sURL% %%i)
     
    :wget
    C:\unixutils\wbin\wget.exe %1=%2 -Ofile.html
     
    find /i "id=""zhead""" file.html
     
    if errorlevel 0 goto end
     
    echo %1=%2 >> result.txt
     
    :end
     
    exit /b


    Всего записей: 37 | Зарегистр. 06-12-2004 | Отправлено: 15:26 18-01-2011 | Исправлено: inock, 15:43 18-01-2011
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    inock
    На сколько я понимаю, если поиск закончился не удачно, то выводишь УРЛ? Тогда так:
    if errorlevel 1 >>result.txt echo.%sURL%%%i
     
     
    Добавлено:
    видимо так?

    Код:
    For /l %%i in (%ID%,1,%count%) do (
    C:\unixutils\wbin\wget.exe "%sURL%=%%i" -Ofile.html
    find /i "id=""zhead""" file.html
    if errorlevel 1 >>result.txt echo.%sURL%=%%i  
    )  

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 15:46 18-01-2011 | Исправлено: res2001, 15:50 18-01-2011
    wolf0425



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

    оптимист , о том почему не заработает как тебе надо твоя конструкция if errorlevel 0 goto end  
    попробуй сам понять из if /?
    как писать If по ошибке правильно - тебе написал res2001
     
    ну или если последний скачанный файл никуда ещё не нужен, и на экран ничего не нужно - то можно в одну строку:

    Код:
    For /l %%i in (%ID%,1,%count%) do C:\unixutils\wbin\wget.exe "%sURL%=%%i" -q -O - | 1>nul find /i "id=""zhead""" || 1>>result.txt echo.%sURL%=%%i  
     

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 16:11 18-01-2011 | Исправлено: wolf0425, 16:17 18-01-2011
    inock

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

    Цитата:
    если поиск закончился не удачно, то выводишь УРЛ? Тогда так

     
    Это уже мелочи отладки. Оконечный вариант скрипта:
     

    Код:
    @echo off
    set ID=301970
    set STEPS=10
    set sURL=http://vegacomp.ru/index.php?productID
    set /a "count=ID+STEPS"
    For /l %%i in (%ID%,1,%count%) do (call :swget %sURL% %%i)
    goto :eof
     
    :swget
     
    echo start wget && C:\unixutils\wbin\wget.exe %1=%2 -Ofile.html
    if errorlevel 1 goto fail
     
    find /i "id=""zhead""" file.html
    if errorlevel 1 echo %1=%2 >> result.txt
    goto end
     
    :fail
    echo URL %1=%2 is error >> errors.txt
     
    :end
    exit /b

     
    Все работает, все ловит )
    Спасибо за помощь
     
     

    Всего записей: 37 | Зарегистр. 06-12-2004 | Отправлено: 16:41 18-01-2011
    firsthar



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    вот ещё минитз.
    вполне решабельно и для меня, но хотелось бы как-то поэлегантней....
     
    ВСТУПЛЕНИЕ.
     
    в разных концах города сидят три туловища. иванов, петров, сидоров.
    время от времени им нужно юзать одну ниразу не многопользовательскую программу, запуск которой сразу двумя или более юзерами чреват.
     
    ЗАДАНИЕ.
     
    необходимо что б каждый юзер мог проверять наличие других в программе перед входом и каким-то раком отсылать свой статус.
     
    ДАНО.
     
    ftp сервер.
    юзание wget и wput допускается.
     
    ВАРИАНТ ОТ МЕНЯ.
     
    три батника.
    1. online.cmd
    создаёт файл ivanov.man на ftp
    2. offline.cmd
    удаляет файл ivanov.man на ftp
    3. check.cmd
    проверяет наличие ivanov.man, petrov.man, sidorov.man на ftp и выводит на экран.

    Всего записей: 2680 | Зарегистр. 24-11-2005 | Отправлено: 02:58 19-01-2011 | Исправлено: firsthar, 03:03 19-01-2011
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    firsthar
    Туловища сидят в разных концах города и запускают одну и туже программу, видимо программа находится в каком-то одном месте и запускают через ... терминал например, зачем тогда геморой с ФТП?
    Опиши подробней, как запускается прога.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 09:41 19-01-2011
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    никаких вгетов и цурлов не надо, зайди на фтп сервер командой ftp

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 09:50 19-01-2011
    firsthar



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

    Всего записей: 2680 | Зарегистр. 24-11-2005 | Отправлено: 09:52 19-01-2011
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    это пример н а использование самых важных команд , будет работаь

    Цитата:
     
    ECHO OFF
    COLOR 9F
    CLS
    echo OPEN mirror.yandex.ru>MYFTP.txt
    echo ANONYMOUS>>MYFTP.txt
    echo 123>>MYFTP.txt
    echo BELL>>MYFTP.txt
    echo STATUS>>MYFTP.txt
    echo DIR>>MYFTP.txt
    echo CD mozilla>>MYFTP.txt
    echo DIR>>MYFTP.txt
    echo CD firefox>>MYFTP.txt
    echo DIR>>MYFTP.txt
    echo CD releases>>MYFTP.txt
    echo DIR>>MYFTP.txt
    echo CD 3.6.13>>MYFTP.txt
    echo DIR>>MYFTP.txt
    echo CD win32>>MYFTP.txt
    echo DIR>>MYFTP.txt
    echo CD ru>>MYFTP.txt
    echo DIR>>MYFTP.txt
    echo binary>>MYFTP.txt
    echo get "Firefox Setup 3.6.13.exe">>MYFTP.txt
    echo quit>>MYFTP.txt
    ftp -s:myftp.txt
    pause
     

     
    Добавлено:
    ну что не запалили надо сначала файл положить на фтп убедиться что он там один, и только после этого заходить
    а это пример для закачки файла на гипотетический фтп не будет работать
    Добавлено:

    Цитата:
     
    @ECHO OFF
    COLOR 9F
    CLS
    echo OPEN ftp.myftp.ru>MYFTP.txt
    echo login>>MYFTP.txt
    echo password>>MYFTP.txt
    echo BELL>>MYFTP.txt
    echo STATUS>>MYFTP.txt
    echo BINARY>>MYFTP.txt
    echo PUT "myftp.txt">>MYFTP.txt
    echo QUIT>>MYFTP.txt
    ftp -s:myftp.txt
    pause
     

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 09:52 19-01-2011 | Исправлено: bomzzz, 09:59 19-01-2011
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    ВАРИАНТ ОТ МЕНЯ.
    Запускать прогу через промежуточный батник, который будет сначала проверять наличие файлов флагов, если они есть, то выводить соответствующее сообщение, если нет, создавать свой файл-флаг, запускать прогу, после окончания работы проги удалять свой файл-флаг.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 09:55 19-01-2011
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    вот не записал как обработку оошибок команды фтп делать, но если файлана сервере не будет он скачается с размером ноль. не важно же кто уже пользуется главное что пользуется, можно имя файла одно использовать а во внутрь записать че угодно главное хотя бы один байт
     
    Добавлено:
    нет должны быть разные имена. чтоб четко не войти вдвоем
     
    Добавлено:
    на народе.ру аккаунт зарегьте там фтп есть, и на почте.ру кается тоже, был по крайне ймере

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 09:56 19-01-2011 | Исправлено: bomzzz, 10:03 19-01-2011
    res2001



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

    Цитата:
    нет должны быть разные имена. чтоб четко не войти вдвоем  

    Можно и одним файлом обойтись. Если нужно различать, кто именно занял можно в этот файл писать имя пользователя создавшего флаг.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 10:22 19-01-2011
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    нет тогда может быть так, что оба зайдут
     
    Добавлено:
    проверяешь отсутсвие файлов товарок, ложишь свой, еще раз проверяешь отсутсвие файлов и только после этого входишь. тогда никак оба не зайдут

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 10:25 19-01-2011
    MGrom



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день!
    Есть разветвленная структура папок. В них лежат куча файлов. Надо заархивировать файлы определенного расширения и архивы сложить именно там, где находятся источники.
    Как реализовать на bat-файлах задачку? Или от чего отталкиваться?

    Всего записей: 15 | Зарегистр. 24-01-2007 | Отправлено: 13:31 19-01-2011
    lorents



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день!
    Подскажите, пожалуйста, почему код не работает, если у меня количество обрабатываемых папок больше 9?

    Код:
    for %%i in (.\dir1\*.*) do (
        call :print "%%~nxi" "dir1\%%~nxi" "dir2\%%~nxi" "dir3\%%~nxi" "dir4\%%~nxi"
    )
     
    :print
    echo %1;%~z2;%~z3;%~z4;%~z5 >>png.csv
    exit /b


    ----------
    Image Catalyst - оптимизация изображений без потери качества

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 14:20 19-01-2011 | Исправлено: lorents, 14:20 19-01-2011
    res2001



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

    Цитата:
    количество обрабатываемых папок больше 9

    Что ты имеешь ввиду?
    Сейчас тут обрабатывается только 4 папки.
     
    Добавлено:
    MGrom

    Цитата:
    Есть разветвленная структура папок

    Папки надо обходить рекурсивно? Какая все же структура папок? Они лежат где-то в одной папке или разбросаны в разных местах по всему диску?
    Архивировать файлы во всех вложенных подпапках или только в текущей папке? Архив создавать с каким именем?

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 14:28 19-01-2011
       

    Страницы: 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 100 101 102 103 104 105 106 107 108

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 10
    vu1tur (29-07-2011 12:47): Задачи на bat-файлах 11


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru