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

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



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    GORA2
    вообще вопрос был про конкретную реализацию. исходя из примера в вашем предыдущем посте как должен выглядеть код?
    например у меня в папке с файлом download.exe есть файл ENHANCER.zip с датой создания более ранней чем доступная по указанному адресу, за счет чего в коде он сравнивает, откуда берет путь для сравнения файла (из папки старта download.exe имя файла в конце строки адреса) или как?
     
    попробовал
     
    FOR /f "delims=*" %%I IN ( 'DOWNLOAD.EXE 11 http://download.skype.com/SkypeSetupFull.exe' ) DO ECHO %%I
    echo %ERRORLEVEL%
    DOWNLOAD.EXE http://download.skype.com/SkypeSetupFull.exe
    echo %ERRORLEVEL%
     
    с рядом лежащим файлом SkypeSetupFull.exe 4-й линейки и последнего билда 5-ой
    скрипт в любом случае качает последний файл и кладет рядом с текущим с именем
    00_SkypeSetupFull.exe
    01_SkypeSetupFull.exe
    и т.д.
     
    что мне надо поправить чтобы он сравнил дату создания файла в папке скрипта и на сервере и только в случае нахождения более нового файла качал его и заменял текущий?

    ----------
    Intel Ci7-2600K 3.4@4.5 Ghz/GeForce GTX 550 Ti 1024Mb/240Gb SSD+9Tb HDD's/RAM 16 Gb DDR3 1600/23" ACER T231Hbmid Multi-Touch Sensor Display

    Всего записей: 1472 | Зарегистр. 17-07-2009 | Отправлено: 22:48 02-06-2011
    GORA2



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    5peciali5t
    В последнем архиве находятся два версии утилиты. Возможность сравнения имеется в версии у которой в конце имени стоит + (плюс), как у меня и показано предыдущем посте. Версия без + не имеет такой фичи и будет скачивать файл снова и снова с добавлением двухзначного префикса в имени скаченного файла (что у Вас и происходит).

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 22:58 02-06-2011
    5peciali5t



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    GORA2
    ура. теперь получилось. спасибо за разъяснения
     
    upd: а нет ли там сравнения по Дате создания вместо Даты изменения?

    ----------
    Intel Ci7-2600K 3.4@4.5 Ghz/GeForce GTX 550 Ti 1024Mb/240Gb SSD+9Tb HDD's/RAM 16 Gb DDR3 1600/23" ACER T231Hbmid Multi-Touch Sensor Display

    Всего записей: 1472 | Зарегистр. 17-07-2009 | Отправлено: 23:30 02-06-2011 | Исправлено: 5peciali5t, 23:55 02-06-2011
    mazafakermazafaka



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Уважаемые bat-аники
    Помогите одолеть проблему обратного слэша, уже несколько часов бьюсь - безрезультатно:

    Код:
     
    reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup" /v "SourcePath" /t REG_SZ /d "%regValue%" /f
     

    где %regValue% - путь к каталогу, содержащему пробелы (соответственно берем его в кавычки). Причем этот путь к каталогу может заканчиваться символом "\", а может и не заканчиваться им - заранее неизвестно. Если он заканчивается "\", то экранируется кавычка за ним и в реестр пишется бред.
    Каким образом средствами DOS можно узнать, что последний символ значения переменной %regValue% является "\"? Если бы это можно было как-то определить, то можно было бы задвоить этот слэш в конце, написав что-то типа "%regValue%\", и тогда все было бы Ок. Но как это определить?

    Всего записей: 685 | Зарегистр. 22-04-2003 | Отправлено: 00:10 03-06-2011
    muk_as

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    подскажите пжлст
    необходимо проверить значения ключа в реесте
    и если он равен 1 то сделать первое_дело, а если равен другому значению то перейти во второе_дело
     
    раздел
    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\KasperskyLab\protected\AVP11\settings
     
    ключ
    EnableSelfProtection
     
    значение
    REG_DWORD 1
     
    что то типа етого, только тут он ищет процесс в системе и если находит то окно выводит, необходимо так же и для реестра, если значение 1 то окно вывести, а если другое то перейти к след строке
     

    Код:
     
    tasklist | find "avp.exe"
    if errorlevel 1 goto NoRecord
    goto Sone
     
    :Sone
    chcp 1251
    msg * Вы не вышли из KIS2011! Внимательнее читайте инструкцию.
    exit
     
    :NoRecord
     

    Всего записей: 443 | Зарегистр. 30-10-2009 | Отправлено: 03:06 03-06-2011
    01MDM



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

    Цитата:
    Каким образом средствами DOS можно узнать, что последний символ значения переменной %regValue% является "\"?

    Средствами DOS не знаю. А разве в DOS есть реестр? Если для виндовс, то приведи переменную к одному виду:

    Код:
     
    set "regvalue=%regvalue%\"
    set "regvalue=%regvalue:\\=\%"
    set "regvalue=%regvalue:~0,-1%"
     
    reg add ... /d "%regvalue%" /f
     

     
     
    Добавлено:
    muk_as

    Код:
     
    @echo off
    setlocal
     
    set "regpath=hklm\SOFTWARE\Wow6432Node\KasperskyLab\protected\AVP11\settings"
     
    for /f "tokens=3" %%i in (' reg query "%regpath%" /v EnableSelfProtection ') do set /a "value=%%i"
    if %value% equ 1 (goto:sone) else (goto:norecord)
     



    ----------
    Вопросы в личке останутся без ответа

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 06:34 03-06-2011
    GORA2



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

    Цитата:
    а нет ли там сравнения по Дате создания вместо Даты изменения?

    Хмм... Так оно там и так по дате создания сравнивается.

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 08:11 03-06-2011
    BrateloSlava

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

    ----------
    Земля - держится на Слонах.
    Слоны - на Черепахе.
    А Черепаха - на скотче.

    Всего записей: 1203 | Зарегистр. 08-12-2004 | Отправлено: 11:00 03-06-2011 | Исправлено: BrateloSlava, 11:46 03-06-2011
    5peciali5t



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

    Цитата:
    Хмм... Так оно там и так по дате создания сравнивается.

    тьфу, т.е. наоборот по дате изменения (когда файл был собран)

    ----------
    Intel Ci7-2600K 3.4@4.5 Ghz/GeForce GTX 550 Ti 1024Mb/240Gb SSD+9Tb HDD's/RAM 16 Gb DDR3 1600/23" ACER T231Hbmid Multi-Touch Sensor Display

    Всего записей: 1472 | Зарегистр. 17-07-2009 | Отправлено: 12:23 03-06-2011
    muk_as

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    еще не подскажите нормальных bat2exe которые корректно работют с msg
    а то батник вида
    chcp 1251  
     msg * Вы не вышли из KIS2011! Внимательнее читайте инструкцию.  
     exit
     
    работает
    а конвертнув его в EXE с посощью quickbfc Quick Batch File Compiler пишет что
     
    "msg" не является внутренней или внешней
    командой, исполняемой программой или пакетным файлом.

    Всего записей: 443 | Зарегистр. 30-10-2009 | Отправлено: 12:28 03-06-2011
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Видимо выполняешь bat.ехе на системе где msg.exe не доступен.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 12:46 03-06-2011 | Исправлено: res2001, 12:55 03-06-2011
    muk_as

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    нашел да
    c windows system32, а какая глобальная переменная отвечает за етот путь?
     
    все в одной ос делаю - 7ка 64бит
    батник вида
    %winDir%\system32\msg.exe * Вы не отключили самозащиту KIS2011! Внимательнее читайте инструкцию.
    все норм
     
    ексе того же вида - ничего
     
    а какими еще средствами можно сообщить юзеру об ошибке. но только не в черном окне исполнения бат файла

    Всего записей: 443 | Зарегистр. 30-10-2009 | Отправлено: 12:56 03-06-2011 | Исправлено: muk_as, 13:00 03-06-2011
    res2001



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

    Цитата:
    c windows system32, а какая глобальная переменная отвечает за етот путь?  

    Вообще за поиск исполняемых файлов отвечает одна переменная - PATH
    Этот каталог в нее уже включен изначально.
     

    Цитата:
     какими еще средствами можно сообщить юзеру об ошибке. но только не в черном окне исполнения бат файла

    Можно с помощью vbs/js.
    На js это выглядит так:
    Создашь файл с расширением js и содржимым
    WScript.echo("сообщение");
     
    Запускать так:
    wscript //Nologo file.js
     
     
    Добавлено:
    Но интерпретатор vbs/js - это тоже отдельная программа, наверняка она лежит там же.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 13:12 03-06-2011
    muk_as

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

    Всего записей: 443 | Зарегистр. 30-10-2009 | Отправлено: 13:17 03-06-2011
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    muk_as
    Не понятно зачем тебе вообще батник нужен в этом случае, запускай сразу msg, без батника.
     
    Подозреваю, что проблема связана с тем, что когда ты вызываешь бат, то он работает в 64битном окружении, где доступна команда msg, а когда создаешь exe, это получается уже 32битная прога, потому что Quick Batch File Compiler 32битный и в этом окружении msg.exe не доступна.
     
    Добавлено:
    И еще не понятно, зачем ты батник, содержащий 1 строку компилируешь. В чем скрытый смысл. Оставляй как есть - батником.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 13:22 03-06-2011
    muk_as

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

    Код:
     
    setlocal
    IF EXIST "%ProgramFiles(x86)%" ( set "regpath=HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\KasperskyLab\protected\AVP11\settings" ) else ( set "regpath=HKEY_LOCAL_MACHINE\SOFTWARE\KasperskyLab\protected\AVP11\settings" )
       
    for /f "tokens=3" %%i in (' reg query "%regpath%" /v EnableSelfProtection ') do set /a "value=%%i"  
    if %value% equ 1 (goto:goaway0) else (goto:trustme0)
     
    :goaway0
    wscript //Nologo self.js
    exit
     
    :trustme0
    tasklist | find "avp.exe"
    if errorlevel 1 goto trustme1
    goto goaway1
     
    :goaway1
    wscript //Nologo avp.js
    exit
     
    :trustme1
     

     
    такой вариант работает и в бат и в ексе, но вопрос остается можно ли обойтись без доп файлов JS а указать или создавать их в бат файле.

    Всего записей: 443 | Зарегистр. 30-10-2009 | Отправлено: 13:30 03-06-2011 | Исправлено: muk_as, 13:45 03-06-2011
    bandit82



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Заранее извиняюсь если мой вопрос слишком простой, но поиском ничего не нашел.
    Задача:
    Нужно провести проверку по части имени компьютера в домене и выполнить команду если условие выполняется. Я это вижу так:
     
    if %computername%=MAS* ...
     
    т.е. для компьютеров MAS-12 и MAS0098 условие выполнится, а для MAG-33 не выполнится
     
    Так правильно?

    Всего записей: 5 | Зарегистр. 08-09-2007 | Отправлено: 17:35 03-06-2011
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    muk_as
    А к чему необходимость в конвертации в exe? Обычно это делается если необходимо прикрепить какие-то дополнительные утилиты или другие нужные файлы. Чтоб не таскать целую папку.


    ----------
    Вопросы в личке останутся без ответа

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 17:53 03-06-2011
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    bandit82
    echo.%computername% | findstr /b /i "MAS" >nul && echo mas* computer
     
    но для такого простого случая, когда строка сравнения известна уже в момент написания батника,  можно и проще
    if /i "%computername:~0,3%" equ "mas" echo mas* computer

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    bandit82
    Нет не правильно. Оператор сравнения == не понимает подстановку. Проверить можно либо с помощью findstr:

    Код:
     
    echo %computername% | findstr /i /b "MAS" && echo success || echo wrong computer name
     

    Либо отрезав от переменной %computername% интересующие символы:

    Код:
     
    if "%computername:~0,3%"=="MAS" (echo success) else (echo wrong computer name)
     



    ----------
    Вопросы в личке останутся без ответа

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 18:03 03-06-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