Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] проверка версии радмина (http://forum.oszone.net/showthread.php?t=183613)

Mickle 23-08-2010 08:52 1479757

проверка версии радмина
 
@Echo Off
Всем привет!!!
Gora или кто-нибуть помогите пожалуйста!!!
посмотрите пожалуйста правильно я написал! суть такая: если b=a т.е это проверка версии радмина тогда выход ни каких действий иначе идет копирование необходимых файлов и далее установка после чего выход???


Set b=W32i APP ENU 2.2.0.0 shp c:\windows\system32\r_server.exe
For /F "tokens=*" %%i In (c:\windows\var.txt) Do (
Set a=%%i
Rem Выход из цикла после чтения первой строки
GoTo Next
)
:Next
If %a% EQU %b% (Echo Exit ) //если а=б тогда выход
Else //иначе процесс установки
(Echo copy "d:\t.exe" "c:\windows\system32\"
copy "d:\settings.reg" "c:\windows\system32\"
c:\windows\system32\t.exe /install /silence
regedit.exe /s c:\windows\system32\settings.reg )
Pause>Nul
Exit
зарание благодарю!!!

gora 23-08-2010 08:56 1479761

var.txt Вы не привели. Я должен догадаться, что в нем?
Цитата:

Цитата Mickle
If %a% EQU %b%

Переменная %a% имеет пробелы, значит переменные нужно заключать в кавычки.
Цитата:

Цитата Mickle
//если а=б тогда выход

Символом комментария в батниках является слово REM и лучше его использовать в начале строки, а не в последней ее части.
Построение операторов сравнения нельзя произвольно менять, об этом написано в справке. Не меняйте без надобности месторасположение открывающих и закрывающих скобок, а также оператора Else. Это может сделать батник неработоспособным.
Код:

@Echo Off
Set b=W32i APP ENU 2.2.0.0 shp c:\windows\system32\r_server.exe
For /F "tokens=*" %%i In (c:\windows\var.txt) Do (
        Set a=%%i
        Rem Выход из цикла после чтения первой строки, если строк много. Если строка одна, то GoTo Next можно удалить
        GoTo Next
)
:Next
If Not "%a%"=="%b%" (
        Rem если а не равно б тогда процесс установки
        copy /y "d:\t.exe" "c:\windows\system32\t.exe"
        copy /y "d:\settings.reg" "c:\windows\system32\settings.reg"
        c:\windows\system32\t.exe /install /silence
        regedit.exe /s c:\windows\system32\settings.reg
)
Rem иначе выход
Pause>Nul
Exit

PS
Заключайте код батника в теги [code] - значок # на панели быстрого ответа.

Mickle 23-08-2010 11:20 1479842

в var.txt находится всего лишь одна строка -> W32i APP ENU 2.2.0.0 shp c:\windows\system32\r_server.exe
которая идет как константа!
значит теперь правильно?

а файл со строкой формируется спомошью утилитки FileVer проверяет версию exe-шника!

/F "tokens=*" %%i In можно подробнее эту строку разобрать?

deepred 23-08-2010 14:34 1479980

Mickle,

Цитата:

Цитата gora
For /F "tokens=*" %%i In (c:\windows\var.txt) Do ( »

Для более попробной справки читайте вывод For /?, а по данной конструкции:

/F - ключ, определяет дейтвие по раскрытию, чтению и обработки заданного набора (в данном случае "c:\windows\var.txt"), т.е. файл раскрывается и читается. Далее, "tokens" - определяет номер подстроки из строки полученной при чтении файла, символ * указывает на запись всей полученной строки в переменную %%i. Обратите внимание, что параметры "skip" и "delims" в данном случае опущены. После получении переменной в процедуре исполнения DO идет отработка указанных команд.

Маленькое замечание, переменную "b" лучше размещать в кавычках? т.к. её определение идет "ручным способом":

Код:

Set b="W32i APP ENU 2.2.0.0 shp c:\windows\system32\r_server.exe"
или
Set "b=W32i APP ENU 2.2.0.0 shp c:\windows\system32\r_server.exe"


Mickle 23-08-2010 14:44 1479991

Спасибо большое!

DimankoR 23-08-2010 16:08 1480083

For %%a In (*.txt) Do @Call :func %%a %%~ta

Подскажите пожалуйста описание вот этой строки, то что в ней происходит.
для чего используется In () и %~ta

gora 23-08-2010 16:17 1480094

DimankoR, обрабатываются все файлы с расширением *.txt из текущей директории. Имя файла (%%a) и дата/время его создания (%%~ta) передаются в процедуру :func в качестве первого и второго параметра соответственно.
Подробнее см. For /?.


Время: 14:25.

Время: 14:25.
© OSzone.net 2001-