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

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

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

vu1tur (27-04-2007 11:55): продолжаем в теме «Задачи на bat-файлах 3»  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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-файлах (часть 1)
Вопросы, задачи и их решения по работе с командными файлами, а также сопутствующие ссылки.

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 16:59 14-11-2006 | Исправлено: Elroir, 04:30 26-04-2007
    igor_andreev

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

    Цитата:
    Парни подскажите как можно через бат установить шрифт?

    How can I install a font from the command line/batch file?
    http://www.windowsitpro.com/articles/print.cfm?articleid=15167

    Всего записей: 1674 | Зарегистр. 08-12-2004 | Отправлено: 11:22 17-11-2006 | Исправлено: igor_andreev, 11:26 17-11-2006
    topic

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Посмотрел предидущие посты
    Наваял  
    Проверяется наличие файла за сегодня
    Система Вин 2000, на echo %DATE% отвечает Пт 17.11.2006
    А echo %F_Date% отвечает 03.11.06 поэтому пришлось извращаться
     
    @Echo Off
    Set PATH_POISK="D:\Temp\erer\"
    set T_Date=%DATE:~3%
     
    IF %T_DATE:~0,1%==0 (
      SET /A T_DAY=%T_DATE:~1,1%) else (
      SET /A T_DAY=%T_DATE:~0,2%)
     
    IF %T_DATE:~3,1%==0 (
       SET /A T_MONTH=%T_DATE:~4,1%) else (
       SET /A T_MONTH=%T_DATE:~3,2%)
     
    SET /A T_YEAR=%T_DATE:~8,2%
     
    SET T_DAY=%T_DAY%.%T_MONTH%.0%T_YEAR%
     
    FOR %%a IN (%PATH_POISK%\*.*) DO @Call :MY_DEL "%%a" %%~ta
    GoTo :EOF
     
    :MY_DEL
    SET F_DATE=%2
    rem echo %F_Date%
    if %F_DATE%==%T_DAY% (echo файл на месте %1
    ) ELSE (
    echo файл отсутствует
    )
    GoTo :EOF
     
    Писал по образу и подобию предидущих примеров
    Не совсем понял FOR %%a IN (%PATH_POISK%\*.*) DO @Call :MY_DEL "%%a" %%~ta
    особенно %%~ta
    Да и с F_DATE=%2 не разобрался, пчему в таком формате дату выдаёт
    Если объясните буду благодарен
    И можно ли сделать  чтобы при отсутствии нужного файла только одно сообщение выводилось, а не на каждый файл в папке?

    Всего записей: 25 | Зарегистр. 31-01-2006 | Отправлено: 11:35 17-11-2006
    uZver



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

    Цитата:
    %%~ta
    - возвращает дату файла %%a (см. for /?)
     

    Цитата:
    F_DATE=%2
    , т.е. f_date присваивается второй параметр переданный в :MY_DEL , а второй параметр это %%~ta (а вот почему ~t отдает дату в 2 знака - боюсь есть тайна великая)

    Всего записей: 195 | Зарегистр. 10-10-2003 | Отправлено: 11:47 17-11-2006
    Kirillhome



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    topic
    Надо сравнивать день файла с днём заданой даты, месяц - с месяцем, год - с годом.

    Всего записей: 426 | Зарегистр. 23-11-2004 | Отправлено: 13:05 17-11-2006
    Charm1

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Так и не выходит что не так?
     
    if C:\1\new\*.xls %%~ta<>%DATE% (del C:\1\new\*.xls)

    Всего записей: 9 | Зарегистр. 17-11-2006 | Отправлено: 13:20 17-11-2006
    Kirillhome



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Charm1
    Я бы сделал так:
     
    FOR %%a IN (C:\1\new\*.xls) DO (
      if %%~ta NEQ %DATE% (del "C:\1\new\%%a"))
     
     
    Ну, опять же не забываем про формат даты..

    Всего записей: 426 | Зарегистр. 23-11-2004 | Отправлено: 15:24 17-11-2006
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    topic
    Charm1
    Kirillhome
    uZver
    Поправьте меня, если я ошибаюсь, но "%%~ta" возврашает дату и время.
    Соответственно все приведенные здесь варианты сравнения не сработают.
    Делаем так:

    Код:
     
    @echo off
    setlocal enabledelayedexpansion
    FOR %%a IN (C:\1\new\*.xls) DO (  
    set tmp=%%~ta
    set tmp=!tmp:~0,13!
    if "!tmp!" NEQ "%DATE%" (del "C:\1\new\%%a")
    )
     

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 18:42 17-11-2006
    uZver



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

    Цитата:
        %~tI        - переменная %I расширяется до даты /времени файла

    но простой пример доказал что / до перевода вероятно было and, и должно читаться как И
     
    PS. если честно целиком задачу не смотрел ответил только на часть про ~ta лениво было  
    так что Elroir прав

    Всего записей: 195 | Зарегистр. 10-10-2003 | Отправлено: 20:11 17-11-2006 | Исправлено: uZver, 20:12 17-11-2006
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    uZver
    В английском варианте также :

    Цитата:
    %~tI        - expands %I to date/time of file

    Запутать нас хотят

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 22:20 17-11-2006 | Исправлено: Elroir, 22:21 17-11-2006
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    Проблема в том, что простыми способами из MAC-а IP не получишь. В организациях, где это действительно надо - установлено спец. программное обеспечение для этих задач.  
    Если использовать имя сервера, то можно так:  
     
    Код:  
    @echo off  
    for /F "usebackq tokens=5 delims=[] " %%I IN (`"tracert SERVERNAME | find "Tracing""`) DO call :setproxy %%I  
    goto :EOF  
     
    :setproxy  
    echo %1  
    reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v "ProxyEnable" /t REG_DWORD /d 00000001 /f > nul  
    reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v "ProxyServer" /d  %1:8080 /f > nul  
    reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v "ProxyOverride" /d "<local>" /f > nul  
    reg add "HKLM\SYSTEM\CurrentControlSet\Hardware Profiles\Current\Software\Microsoft\windows\CurrentVersion\Internet Settings" /v "ProxyEnable" /t REG_DWORD /d 00000001 /f > nul  
    reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v "ProxyEnable" /t REG_DWORD /d 00000001 /f > nul
     
    Спасибо за отклик, проверил, не работает твой код.
    Нашел кое что, а именно команду arp -a:
    Интерфейс: х.х.х.х --- 0x2
      Адрес IP              Физический адрес     Тип
      х.х.х.х                 00-14-6a-43-3e-44     динамический
      х.х.х.х                 00-13-46-53-23-32     динамический
    вот она как раз и выдает тот список маков и айпишников, остается открытым вопрос, как выделить известный ip, допустим по маку 00-14-6a-43-3e-44 и запихать этот ip в настройки прокси сервера локальной машины?

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 23:49 17-11-2006
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Nagual
    А что именно не работает?
    Выложи здесь результат команды "tracert SERVERNAME", естественно заменив SERVERNAME на имя нужного сервера.

    Цитата:
    как выделить известный ip, допустим по маку 00-14-6a-43-3e-44 и запихать этот ip в настройки прокси сервера локальной машины

    Я знаю про "arp -a", но она выдаст IP и MAC из кэша, а в кэше эти значения появятся толко после соединения с этой машиной (не могу дать 100% - но помнится мне именно так). Ну ладно - если так подходит, то:

    Код:
     
    for /F "usebackq tokens=1" %%I IN (`"arp -a | find "00-14-6a-43-3e-44""`) DO call :setproxy %%I
     

    А дальше так, как было.

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 00:08 18-11-2006
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Трассировка маршрута к SERVERNAME [х.х.х.х]
    с максимальным числом прыжков 30:
     
      1    <5 мс    <4 мс    <2 мс  х.х.х.х  
     
    Трассировка завершена.
     
    Не работает натсройка прокси сервера ((
    То есть при выполнении сценария на рабочей станции происходит только трассировка, эффекта ноль

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 01:08 18-11-2006
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Nagual
    Ну понятно почему не работает. Я писал батник для английской винды, а у тебя она на русском.
    Так - разобьем проблему на две части:
    1. Работает ли установка прокси?
    То есть прописан ли в Internet Explorer прокси сервер 192.168.0.1:8080, после исполнения этого кода?

    Код:
     
    @echo off  
    reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v "ProxyEnable" /t REG_DWORD /d 00000001 /f > nul  
    reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v "ProxyServer" /d  192.168.0.1:8080 /f > nul  
    reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v "ProxyOverride" /d "<local>" /f > nul  
    reg add "HKLM\SYSTEM\CurrentControlSet\Hardware Profiles\Current\Software\Microsoft\windows\CurrentVersion\Internet Settings" /v "ProxyEnable" /t REG_DWORD /d 00000001 /f > nul  
    reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v "ProxyEnable" /t REG_DWORD /d 00000001 /f > nul
     

     
    2. Выдает ли следующий код правильный IP адрес сервера?

    Код:
     
    @echo off
    chcp 1251 > nul
    for /F "usebackq tokens=5 delims=[] " %%I IN (`"tracert SERVERNAME | find "Трассировка""`) DO echo %%I
     

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 02:16 18-11-2006 | Исправлено: Elroir, 02:18 18-11-2006
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    первая часть кода наконец то заработала, а во второй пишет:
    "SERVERNAME" не является внутренней или внешней
    командой, исполняемой программой или пакетным файлом.
    SERVERNAME подставлял верный еесно

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 02:47 18-11-2006
    Elroir



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

    Цитата:
    первая часть кода наконец то заработала

    Уже хорошо!
    Странно, что не работает вторая часть - я проверял
    Попробуй так:

    Код:
     
    @echo off
    chcp 1251 > nul
    for /F "usebackq tokens=5 delims=[] " %%I IN (`"tracert SERVERNAME | find "Трассировка маршрута""`) DO (echo %%I)
     

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



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
     
    Разобрался с ошибками, первая ошибка была название файла tracert.cmd, это приводило к непредсказуемым результатам (тестить не советую), вторая все таки код на русской винде будет работать только в кодировке дос
     
    Итак, окончательный вариант:
     

    Код:
    @echo off
    for /F "usebackq tokens=5 delims=[] " %%I IN (`"tracert SERVERNAME | find "Трассировка""`) DO call :setproxy %%I
    goto :EOF
     
    :setproxy
    echo %1
     
    set ad=reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v
     
    %ad% "ProxyEnable" /t REG_DWORD /d 00000001 /f >nul
    %ad% "ProxyServer" /d %1:8080 /f >nul
    %ad% "ProxyOverride" /d "<local>" /f >nul
    reg add "HKLM\SYSTEM\CurrentControlSet\Hardware Profiles\Current\Software\Microsoft\windows\CurrentVersion\Internet Settings" /v "ProxyEnable" /t REG_DWORD /d 00000001 /f >nul

     
    Повторю, код сохранять в кодировке DOS и ни в коем случае под именем tracert
    Огромный респект Elroir

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 05:15 18-11-2006 | Исправлено: Nagual, 05:20 18-11-2006
    Romero_Ekb



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    Формат dd.mm.yyyy. Нужен dd-mm-yyyy

    Всего записей: 98 | Зарегистр. 02-02-2004 | Отправлено: 10:13 18-11-2006
    Elroir



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

    Код:
     
    @echo off
    ren %1 "%~n1_%date:~0,2%-%date:~3,2%-%date:~6,4%%~x1"
     

    В качестве параметра используется имя файла, который надо переименовать. Если имя с пробелами - его надо заключать в кавычки.  
     
    Nagual

    Цитата:
    Повторю, код сохранять в кодировке DOS

    Так именно поэтому, я поставил команду "chcp 1251" - смена кодовой страницы на русскую Win кодировку.
    Ну ладно - хорошо, что наконец заработало

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 13:46 18-11-2006
    Romero_Ekb



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

    Всего записей: 98 | Зарегистр. 02-02-2004 | Отправлено: 16:31 18-11-2006
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    я в курсе для чего нужна команда chcp1251, но именно с ней у меня код не работает, поэтому выложил рабочий вариант, а именно, без команды chcp1251 и обязательно в кодировке DOS, еще раз спс за помощь...

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 20:36 18-11-2006 | Исправлено: Nagual, 22:25 18-11-2006
       

    Страницы: 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-файлах 2
    vu1tur (27-04-2007 11:55): продолжаем в теме «Задачи на bat-файлах 3»


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru