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

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

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

vu1tur (04-11-2008 23:07): Задачи на bat-файлах 6  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

Nagual



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

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

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

  • Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 12:28 19-03-2008 | Исправлено: Nagual, 01:02 24-09-2008
    king_stiven

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

    Всего записей: 2167 | Зарегистр. 17-07-2006 | Отправлено: 11:58 19-08-2008
    NIKZZZZ



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

    Цитата:
    нужен bat файл который бы перебирал (с заданной степенью глуб

     

    Код:
    @echo off
    if %2==0 goto :eof
    echo Folder: %~dpnx1
    set /a n=%2-1
    for  %%i in (%1\*) do (
      echo File:   %%~dpnxi
    )  
    for /d %%i in (%1\*) do (
      call "%~dpnx0" "%%~dpnxi" %n%
    )  
    goto :eof

     
    Вызов:
    test.bat СтартовыйКаталог УровеньВложенности
     
    Выводит только имена каталогов и файлов, для вывода нужной информации необходимо изменить строки:
    echo File:   %%~dpnxi
    echo Folder: %~dpnx1
     
     
     
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 12:39 19-08-2008
    01MDM



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

    Цитата:
    Подскажите - почему не работает батник

     
    Это системные переменные? Которые ты сначала удаляешь? Если локальные, то и батник работать не будет.
     
     
     
    Добавлено:
    NovaC
    утилита disk usage (du.exe)  

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 15:52 19-08-2008
    winhex



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть необходимость запустить TrueCrypt на удаленной системе и смонтировать зашифрованный контейнер под буквой T, для чего изготовлен вот такой скрипт:
     
    @echo off
    rem set /p "adr=1. Enter IP-adress or name, please:"
    rem set /p "pass=2. Enter Administrator's password, please:"
    rem set /p "pass2=3.Enter pass for TrueCrypt, please:"
    rem set /p "pathkey=4.Enter key-file path:"
     
    start "" "d:\inst\exec\psexec.exe" \\%adr% -u domain\admin -p %pass%  \\CompName\TrueCrypt\TrueCrypt.exe /l T /v %pathkey% /p %pass2%
     
    Скрипт не пашет... Что не так? Ошибок никаких не выдает
    Помогите разобраться

    ----------
    А сегодня что для завтра сделал я ?..

    Всего записей: 628 | Зарегистр. 27-02-2005 | Отправлено: 17:26 19-08-2008
    01MDM



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

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 18:06 19-08-2008
    NovaC

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

    Цитата:
    Выводит только имена каталогов и файлов, для вывода нужной информации необходимо изменить строки

    проблема в том  что в синтаксических конструкциях типа %~dpnx1 не предусмотрено расширение переменной до РАЗМЕРА ПАПКИ

    Всего записей: 95 | Зарегистр. 09-01-2008 | Отправлено: 05:59 20-08-2008 | Исправлено: NovaC, 06:12 20-08-2008
    winhex



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    блин, REM тут не причем, поставил их чтоб оттестить файл и в запарке забыл их снять в примере. Т.е. в оригинальном файле их нету и дело не в них.

    Код:
    @echo off  
    set /p "adr=1. Enter IP-adress or name, please:"  
    set /p "pass=2. Enter Administrator's password, please:"  
    set /p "pass2=3.Enter pass for TrueCrypt, please:"  
    set /p "pathkey=4.Enter key-file path:"  
     
    start "" "d:\inst\exec\psexec.exe" \\%adr% -u domain\admin -p %pass%  \\CompName\TrueCrypt\TrueCrypt.exe /l T /v %pathkey% /p %pass2%

     
    мне кажется, что я как-то неправильно передал параметры для psexec.... Может кавычек не хватает, или еще что?

    ----------
    А сегодня что для завтра сделал я ?..

    Всего записей: 628 | Зарегистр. 27-02-2005 | Отправлено: 09:16 20-08-2008
    Dis74



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    подскажите.  
    есть файл следующего вида:
    [01/Feb/2008 07:50:55] ....бла бла бла мусор........[mark1] 3092/524/3616 [mark2] 8/5/13
    [01/Feb/2008 07:50:55] ....другое бла бла. длина отличается....... [mark1] 1/24/616 [mark2] 1/2/3
     
    как то можно взять цифры между [mark1] и [mark2]  и сложить эти цифры.
    тоесть чтобы результат получился сумма:
     
     3092/524/3616  
    +1/24/616  
    __________________
    3092+1/524+24/3616+616  
    (слешь тут просто разделитель. не математическое деление)
     
    примерно представляю как это сделать но как отловить в случае со строкой переменной длинны?

    Всего записей: 166 | Зарегистр. 12-11-2007 | Отправлено: 09:59 20-08-2008 | Исправлено: Dis74, 10:09 20-08-2008
    vu1tur



    Moderator-Saaber
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Dis74

    Код:
     
    @echo off
    SET P1=0
    SET P2=0
    SET P3=0
    for /F "tokens=1,2,3 delims=/" %%a in ('cat %1 ^| sed -e "s/.*\[mark1\] \(.*\) \[mark2\].*/\1/"') do (  
    set /a P1 = p1 + %%a
    set /a P2 = p2 + %%b
    set /a P3 = p3 + %%c
    )
    echo %P1%/%P2%/%P3%
     


    ----------
    I am free of all prejudice. I hate everyone equally.

    Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 10:17 20-08-2008
    Dis74



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

    Цитата:
    for /F "tokens=1,2,3 delims=/" %%a in ('cat %1 ^| sed -e "s/.*\[mark1\] \(.*\) \[mark2\].*/\1/"') do  

     
    cat? я в винде.
    type?

    Всего записей: 166 | Зарегистр. 12-11-2007 | Отправлено: 10:23 20-08-2008 | Исправлено: Dis74, 10:30 20-08-2008
    01MDM



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

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 10:26 20-08-2008
    vu1tur



    Moderator-Saaber
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Dis74
    Да. Всё это замечательно работает в винде. Не ленитесь, в шапочку загляните, там есть ссылочка: UnxUtils - набор GNU утилит для Win32.

    ----------
    I am free of all prejudice. I hate everyone equally.

    Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 10:27 20-08-2008
    Dis74



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

    Цитата:
    You don't have permission to access /UnxUtils.zip on this server.

    скинь пожалуйста на мыло dis(a)pop3(dot)ru

    Всего записей: 166 | Зарегистр. 12-11-2007 | Отправлено: 10:32 20-08-2008
    pgofman2

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

    Цитата:
     
    Это системные переменные?
    Которые ты сначала удаляешь?
    Если локальные, то и батник работать не будет.
     

     
    Извини - но не понял ни Вашего вопроса и ответа на мой вопрос
     
    там же просто делается ping
    причем первая проверка пинга проходит а вот вторая уже летит в космос
     

    Код:
     
    set servername=myserver
    set router=192.168.1.1
    set dns1=89.235.136.2
    set dns2=89.235.136.4
     
    PING %router% | FIND "TTL=" >NUL
    IF ERRORLEVEL 1 GOTO router
    goto Exit
     
    :router
    PING %dns1% | FIND "TTL=" >NUL
    IF ERRORLEVEL 1 GOTO dns1
    goto Exit
     
    :nds1
    PING %dns2% | FIND "TTL=" >NUL
    IF ERRORLEVEL 1 GOTO reboot
    goto Exit
     
    :reboot
    c:\windows\system32\shutdown.exe -r -f -m \\%servername% -t 60 -d up:125:1
    goto Exit
     
    :Exit
     

     

    Всего записей: 66 | Зарегистр. 07-09-2006 | Отправлено: 10:38 20-08-2008 | Исправлено: pgofman2, 10:41 20-08-2008
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Dis74
    Выбирай что тебе надо: http://gnuwin32.sourceforge.net/packages/
     
    Только не забудь скачать `dependencies` если они есть.
     
     
    Добавлено:
    pgofman2

    Цитата:
    там же просто делается ping

    Вопрос был почему удаляются переменные. Если они локальные, созданные в батнике, то их последующее использование невозможно.  

    Код:
     

    set servername=
    set router=
    set dns1=
    set dns2=

     
    PING %router% | FIND "TTL=" >NUL
    IF ERRORLEVEL 1 GOTO router
    goto Exit
     
    :router
    PING %dns1% | FIND "TTL=" >NUL
    IF ERRORLEVEL 1 GOTO dns1
    goto Exit
     
    :nds1
    PING %dns2% | FIND "TTL=" >NUL
    IF ERRORLEVEL 1 GOTO reboot
    goto Exit
     
    :reboot
    c:\windows\system32\shutdown.exe -r -f -m \\%servername% -t 60 -d up:125:1
    goto Exit
     
    :Exit  
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 10:39 20-08-2008 | Исправлено: 01MDM, 10:56 20-08-2008
    vu1tur



    Moderator-Saaber
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Dis74
    http://gnuwin32.sourceforge.net/packages/sed.htm

    ----------
    I am free of all prejudice. I hate everyone equally.

    Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 11:00 20-08-2008
    Dis74



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    тут нет cat. ну cat заменим на type, sed я скачал в другмо месте.
    срипт не работет. но принцип я понял. спаисбо.

    Всего записей: 166 | Зарегистр. 12-11-2007 | Отправлено: 11:01 20-08-2008 | Исправлено: Dis74, 15:26 20-08-2008
    01MDM



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

    Код:
     
    @echo off
    setlocal
     
    set servername=myserver
    set router=192.168.1.1
    set dns1=89.235.136.2
    set dns2=89.235.136.4
     
    for %%i in (%router% %dns1% %dns2%) do (
         ping -n 1 %%i 1>nul && echo Done %%i || goto:reboot
    )
    goto:eof
     
    :reboot
    c:\windows\system32\shutdown.exe -r -f -m \\%servername% -t 60 -d up:125:1
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 11:07 20-08-2008 | Исправлено: 01MDM, 11:10 20-08-2008
    Dis74



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    vu1tur
    125990313/-1296665873/-1170675560
    =-О почему ушло в минус? переполнение?

    Всего записей: 166 | Зарегистр. 12-11-2007 | Отправлено: 12:10 20-08-2008
    vu1tur



    Moderator-Saaber
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Dis74
    Ну а что тут удивительного то?  
    2^31=2147483648 — максимум

    ----------
    I am free of all prejudice. I hate everyone equally.

    Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 12:59 20-08-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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 5
    vu1tur (04-11-2008 23:07): Задачи на bat-файлах 6


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

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.Board
    © Ru.Board 2000-2020

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru