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

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

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

vu1tur (26-05-2009 11:39): часть 7 — http://forum.ru-board.com/topic.cgi?forum=62&topic=17154#1  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

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





    http://forum.ru-board.com/topic.cgi?forum=62&topic=17154

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 23:07 04-11-2008 | Исправлено: vu1tur, 11:38 26-05-2009
    spudbl

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Привет народ )))  
    немгоу никак с for разобраться =(
     
    вопщем есть текстовый файл  со списком например
     
    123
    1234
    12
    12345
     
    как сделать  чтобы 123456 из переменной записалось в этот список а 123 например не записалось потаму что есть там уже))  
     
    извините что бред написал   по другому никак  не могу сформулировать

    Всего записей: 20 | Зарегистр. 07-12-2008 | Отправлено: 10:35 07-12-2008
    Elroir



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

    Код:
     
    @echo off
    set "var=123456"
    type list.txt | findstr /r /c:"^%var%$" || echo %var%>>list.txt
     

    list.txt - файл со списком
    var - переменная

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 11:27 07-12-2008
    spudbl

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
     
    СПАСИБА !
     
    но у меня еще один вопрос))  
     
    например  у меня есть текстовый файл в нем список адресов , как сделать чтобы  он  по очереди  их от туда брал и пинговал??

    Всего записей: 20 | Зарегистр. 07-12-2008 | Отправлено: 13:12 07-12-2008
    Elroir



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

    Код:
     
    @echo off
    for /f "tokens=*" %%a in (ips_list.txt) do ping %%a
     


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 13:44 07-12-2008
    spudbl

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    и записать результат  пинга в файл
     
    Добавлено:
    ой туплююю )) ваще жесть)))  >> и все дела)

    Всего записей: 20 | Зарегистр. 07-12-2008 | Отправлено: 13:53 07-12-2008
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    spudbl
    Под "результатом" ты подразумеваешь сообщение "Есть связь/нет связи" или вывод самой команды ping?
     
    Добавлено:
    Именно так :-)

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

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

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

    Код:
    @echo off
    for /F "tokens=2* delims==" %%A in ('nbtstat -a %%ip%%^| find "MAC"') do for %%B in (%%A) do set macadress=%%B  
    echo %macadress%, %ip%>>ipmaclist.txt  

     
    подскажете  что тут неправельно??  
     
     
     
    Добавлено:
     

    Код:
    @echo off
    for /f "tokens=*" %%a in (ips_list.txt) do ping %%a  

     
     а если надо например попинговать адреса  начинающиеся на 10.12. а остальные  не нада?  то как там будет?

    Всего записей: 20 | Зарегистр. 07-12-2008 | Отправлено: 14:29 07-12-2008 | Исправлено: spudbl, 14:32 07-12-2008
    Elroir



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

    Цитата:
    подскажете  что тут неправельно?

    В слове "неправельно" ошибка

    Код:
     
    @echo off
    for /f "tokens=2* delims== " %%a in ('nbtstat -a %ip% ^| find "MAC"') do set "macaddress=%%b"
    echo %macaddress%, %ip%>>ipmaclist.txt
     

     

    Цитата:
    надо например попинговать адреса  начинающиеся на 10.12. а остальные  не нада?  то как там будет?


    Код:
     
    @echo off  
    for /f "tokens=1,2* delims=." %%a in (ips_list.txt) do if "%%a.%%b"=="10.12" ping %%a.%%b.%%c  
     

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 15:20 07-12-2008
    spudbl

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

    Всего записей: 20 | Зарегистр. 07-12-2008 | Отправлено: 16:28 07-12-2008
    spudbl

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

    Код:
    for /f "tokens=3* delims=." %%a in ('echo %%ip%%') do set var=%%a

     
    var получается с пробелом на конце... как его убрать??

    Всего записей: 20 | Зарегистр. 07-12-2008 | Отправлено: 09:34 08-12-2008
    Elroir



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

    Код:
    ... do set "var=%%a"


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 09:40 08-12-2008
    perzend

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Привет всем!  
     
    Задача такая стоит у меня.  
     
    Необходимо подсчитать количество  символов "\" в строке. Строка берется в цикле из выходных данных команды dir. Т.е. нужно знать сколько раз встречается "\" в пути к файлу.  
     
    А еще вопрос. Где то храниться результат такой команды  
    for /f "tokens=* delims=\" %%i in (dir *.txt /s/b) do  
     
    Вернее мне надо знать сколько токенов содержит каждая строка. Или записать в переменную это можно?

    Всего записей: 7 | Зарегистр. 05-12-2008 | Отправлено: 10:15 08-12-2008
    king_stiven

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

    Цитата:
    Необходимо подсчитать количество  символов "\" в строке.


    Код:
    cd /d "путь к нужному файлу"
    :begin
    set /a sum+=1
    if /i "%~d2\" neq "%cd%" (
        cd ..
        goto begin
    )
    set /a sum+=1
    call :ert
     
    :ert
    echo %sum%


    Цитата:
    Где то храниться результат такой команды  


    Код:
    for /f "tokens=* delims=\" %%i in (dir *.txt /s/b) do echo %%i

    Лучше напиши подробнее про задачу, я делал подобную.

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 11:12 08-12-2008 | Исправлено: king_stiven, 11:14 08-12-2008
    perzend

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    Спасибо. Буду пробовать щас.
     
    Задача примерно так звучит. Есть каталог  TMP, содержащий n-ое количество подкатологов, которые содержат k-ое количество подкаталогов ну и т.п. )) В них лежат файлы, например, *.txt. Необходимо найти самый глубоко зарытый файл в каждом подкатологе каталога TMP и перейти в каталог его содержащий.  Ну вот пока все.  

    Всего записей: 7 | Зарегистр. 05-12-2008 | Отправлено: 12:35 08-12-2008
    GORA2



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите разобраться. Есть файл Settings.ini следующего содержания:
    Код:
    ; ------------- File of options -------------
    path1=%commander_path%\Folder\Folder 1\file1.exe
    path2=!commander_path!\Folder\Folder 1\file2.exe
    path3=%commander_path%\Folder\Folder 1\file3.exe
    path4=%PROGRAMFILES%\Folder\Folder 2\file4.exe
    path5=!PROGRAMFILES!\Folder\Folder 2\file5.exe
     
    И тестовый батник (кусок реального, запускается из ТС):
    Код:
    @echo off
    SET pathIni=%CD%\& CD /D %~dp0
    SET pathTMP=%~dp0
    setlocal enabledelayedexpansion
    CHCP 1251>nul
     
    FOR /F "eol=; delims== tokens=1,2 usebackq" %%i IN ("%pathIni%Settings.ini") DO (
    SET %%i=%%j
    echo %%i=%%j
    )
    echo %%path1%%=%path1%
    echo %%path2%%=%path2%
    echo %%path3%%=%path3%
    echo %%path4%%=%path4%
    echo %%path5%%=%path5%
    pause>nul
     
    В результате работы имеем:
    Код:
    path1=%commander_path%\Folder\Folder 1\file1.exe
    path2=D:\totalcmd\Folder\Folder 1\file2.exe
    path3=%commander_path%\Folder\Folder 1\file3.exe
    path4=%PROGRAMFILES%\Folder\Folder 2\file4.exe
    path5=C:\Program Files\Folder\Folder 2\file5.exe
    %path1%=%commander_path%\Folder\Folder 1\file1.exe
    %path2%=D:\totalcmd\Folder\Folder 1\file2.exe
    %path3%=%commander_path%\Folder\Folder 1\file3.exe
    %path4%=%PROGRAMFILES%\Folder\Folder 2\file4.exe
    %path5%=C:\Program Files\Folder\Folder 2\file5.exe
     
    Почему переменные в восклицательных знаках раскрываются, а в процентах нет?
    И как заставить их раскрываться?

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 13:18 08-12-2008 | Исправлено: GORA2, 13:23 08-12-2008
    tdr1225



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

    Цитата:
    быват 10, 20 и более


    Код:
    for /L %%i in (1,1,99) do (
       wr a -r c:\reqs folder%%i
       )
     

    где 99 то, что ты называешь более 20
    wr - это вызов WinRar'a
     
    А вот если
    Цитата:
    есть условие, что i идут от 1 до неважно-чего БЕЗ пропусков

    то можно сделать покрасивше.

    Всего записей: 281 | Зарегистр. 07-12-2005 | Отправлено: 13:45 08-12-2008 | Исправлено: tdr1225, 13:47 08-12-2008
    Elroir



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

    Цитата:
    Почему переменные в восклицательных знаках раскрываются, а в процентах нет?

    Потому что восклицательные знаки говорят CMD, что надо произвести отложенное раскрытие переменных, а знаки процента нет.
     

    Цитата:
    И как заставить их раскрываться?

    Наверно так:

    Код:
     
    FOR /F "eol=; delims== tokens=1,2 usebackq" %%i IN ("%pathIni%Settings.ini") DO (  
    for /f "tokens=*" %%a in ('echo %%j') do set %%i=%%a SET %%i=%%a)  
     


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 13:56 08-12-2008
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    perzend
    Пройдись по каталогам командой
    FOR /R %%k IN (.) DO (
    в каждом каталоге ищи есть ли подкаталоги командой dir с ключом /a:d если нет подкаталогов, то данный самый глубокий
    FOR /R %%a IN (.) DO (
        for /f "tokens=*" %%c in ('dir /b /a:d')

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 14:11 08-12-2008
    perzend

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    Спасибо.
    Это понятно. Но мне нужен не просто самый глубокий каталог, а тот в котором лежит файл *.txt.

    Всего записей: 7 | Зарегистр. 05-12-2008 | Отправлено: 14:25 08-12-2008
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    perzend
    Заходишь в каталог
    FOR /R %%a IN (.) DO (  
        если здесь есть нужный файл объявляй его переменным
        if exist file set peremennay=file
        иди дальше по каталогам в каждом переобъявляй переменную и так пока не будет подкаталогов
         for /f "tokens=*" %%c in ('dir /b /a:d')  

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 14:36 08-12-2008
       

    Страницы: 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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 6
    vu1tur (26-05-2009 11:39): часть 7 — http://forum.ru-board.com/topic.cgi?forum=62&topic=17154#1


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru