Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 1.3] AutoIt скрипты

Закрытая тема
Настройки темы
[Архив - Часть 1.3] AutoIt скрипты

Старожил


Сообщения: 250
Благодарности: 16

Профиль | Отправить PM | Цитировать


Изменения
Автор: Vadikan
Дата: 25-01-2008
Внимание!
Тема переведена в архивное состояние





(настоятельно рекомендуется к прочтению/поиску)


Руководство к действию по работе c AutoIt.

Помогите пожалуйста. Нужен маленький скриптик для решения некоторых рутинных задачь.
Вот что нужно сделать последовательно:

1) в папке DIR1 находим и удаляем файлы в названии которых присутствует text_1
2) в папке DIR2 находим xxx.sif и удаляем строки, в которых присутствует text_1
3) в папке DIR3 находим xxx.inf и добавляем в его секцию [XXX] несколько строчкек (text_2, text_3, ..., text_n)
4) в папке DIR4 находим yyy.inf ищем в его секции [YYY] text_4 и заменяем его на text_5
5) сохраняем все изменения и выводим отчёт о проделанной работе :-)

Заранее благодарен.

Отправлено: 05:05, 03-12-2006

 

Пользователь


Сообщения: 135
Благодарности: 32

Профиль | Отправить PM | Цитировать


Завершение процессов и служб
Некоторые процессы невозможно завершить с помощью ProcessClose() т.к. они имеют отношение к службам.
А если такой просесс завершить принудительно, (например с помощью консольной команды TASKKILL) то в журнал системных событий записывается сообщение об ошибке, и потом что либо найти в нём с каждым разом становится всё труднее...
Всё это навело меня на мысль написать скрипт:

Код: Выделить весь код
$ProcessName="oodag.exe" ; имя завершаемого процесса
;~ Подключаемся к WMI:
$WMI = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2")
$PID = ProcessExists($ProcessName) ;Определяем PID
If $PID Then ProcessClose($PID) ; Если существует - пытаемся убить
If ProcessExists($PID) Then ; Если процесс всё ещё существует тогда
	$OutputName=CheckService($PID) ; проверяем принадлежность процесса к службам (проверку можно пропусить!!!)
	If Not $OutputName=0 Then ; Если является службой тогда
	$Pressed=MsgBox(262144+32+4,"", "Не удалось завершить процесс поскольку"& @CR & _
	"он является запущенной службой: " & $OutputName & @CR & _
	"Остановить службу?")
		If $Pressed=6 Then KillService($PID) ; Если "Да" - останавливаем службу
	EndIf
EndIf

;~ ==================================================
;~ Определяет, является ли процесс запущенной службой (Эту функцию можно исключить!!!)
;~ Если является службой - возвращает "Выводное имя" службы, в противном случае 0
Func CheckService($PrPid)
;~ Формируем текст запроса:
$QueryText = "SELECT * FROM Win32_Service WHERE  ProcessId = '" & $PrPid & "'"
;~ Создаём объект-коллекцию:
$CollectionServices = $WMI.ExecQuery($QueryText)
If $CollectionServices.Count > 0 Then ; Если элементов коллекции > 0 Тогда
	;~ Цикл по элемент(у)ам коллекции:
	For $objItem In $CollectionServices
		Return $objItem.DisplayName
	Next
Else
	Return 0
EndIf 
EndFunc

;~ ==================================================
;~ Останавливает службу, в случае успеха возвращает: 0
Func KillService($PrPID)
;~ Формируем текст запроса:
$QueryText = "SELECT * FROM Win32_Service WHERE  ProcessId = '" & $PrPid & "'"
;~ Создаём объект-коллекцию:
$CollectionServices = $WMI.ExecQuery($QueryText)
If $CollectionServices.Count > 0 Then ; Если элементов коллекции > 0 Тогда
	;~ Цикл по элемент(у)ам коллекции:
	For $objItem In $CollectionServices
		Return $objItem.StopService()
	Next
EndIf
EndFunc

Отправлено: 03:20, 11-05-2007 | #391



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Пользователь


Сообщения: 135
Благодарности: 32

Профиль | Отправить PM | Цитировать


mrak1990
Цитата:
А с чем это связано? Как я понял, при запуске скрипа он первым делом обрабатывается интерпретатором и висит в памяти. И он уже не обращается к файлу. Возможно, что я и не прав. У кого есть мысли по этому поводу - пишите.
При запуске, скрипт действительно обрабатывается интерпретатором и загружается в память, после чего может быть переименован или удалён.
Я думаю единственным препятствием может быть "блокирующий дескриптор" - а откуда ему там взятся, если только в момент переименования, файл не открыт для записи каким либо другим процессом (естественно, такое "открытие" может произойти только с ведома пользователя).

Отправлено: 04:34, 11-05-2007 | #392


Новый участник


Сообщения: 38
Благодарности: 2

Профиль | Отправить PM | Цитировать


Diamond
Цитата:
При запуске, скрипт действительно обрабатывается интерпретатором и загружается в память, после чего может быть переименован или удалён.
Я думаю единственным препятствием может быть "блокирующий дескриптор" - а откуда ему там взятся, если только в момент переименования, файл не открыт для записи каким либо другим процессом (естественно, такое "открытие" может произойти только с ведома пользователя).
К счастью скрипт такой, что на выполнение не требуется особого времени. Тем более, я им сейчас активно пользуюсь. Вроде всё без глюков.
Единственное, что надо будет дописать, чтобы он обновлял не только открытые окна, рабочий стол, но и диалог выбора\открытия файла. Но в этом нет ничего трудного, к счастью.

Отправлено: 20:56, 11-05-2007 | #393


Старожил


Сообщения: 205
Благодарности: 20

Профиль | Отправить PM | Цитировать


Почему вот такой батник работает:
fsum.exe -c -r -d%inputdir% %mdfile% > fsum.err
а автоит нет:
RunWait (@ScriptDir& '\fsum.exe -c -r -d' &$inputdir& ' ' &$mdfile& ' > ' &@ScriptDir& '\fsum.err', @ScriptDir)
пробовал так-же
RunWait (@COMSPEC & ' /c fsum.exe -c -r -d' &$inputdir& ' ' &$mdfile& ' > ' &@ScriptDir& '\fsum.err', @ScriptDir)

Как привильно запустить команду?

Отправлено: 12:06, 13-05-2007 | #394


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


VelDmi
Цитата:
Как привильно запустить команду?
А в чём проявляется проблема с данным примером?

Возможно путь к скрипту содержит пробелы, или служебные символы, в таком случае надёжнее заключать пути в кавычки:

Код: Выделить весь код
RunWait ('"' & @ScriptDir & '\fsum.exe" -c -r -d' & $inputdir & ' ' & $mdfile & ' > "' & @ScriptDir & '\fsum.err"', @ScriptDir)

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 16:31, 13-05-2007 | #395


Старожил


Сообщения: 205
Благодарности: 20

Профиль | Отправить PM | Цитировать


не работает > fsum.err, то есть при вызове из автоит не пишет в файл fsum.err

Отправлено: 17:45, 13-05-2007 | #396


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


VelDmi
проверил - с @COMSPEC все работает, попробуй вместо /c поставить /k и отследить сообщения

Отправлено: 06:20, 14-05-2007 | #397


Старожил


Сообщения: 205
Благодарности: 20

Профиль | Отправить PM | Цитировать


amel27
Посмотри пожалуйста пример вживую. http://rapidshare.com/files/31198773/1.rar.html
Батником у меня создается файл, а автоитом нет.

Отправлено: 09:39, 14-05-2007 | #398


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


VelDmi
CMD ругался на кавычки после ">", так с кавычками вроде работает:
Код: Выделить весь код
$CutDir = '"' &@ScriptDir& '\CutDir' & '"'
$exfile = '"' &@ScriptDir& '\fsum.exe' & '"'
$mdfile = '"' &@ScriptDir& '\sums.md5' & '"'
$erfile = '"' &@ScriptDir& '\fsums.err' & '"'

RunWait (@COMSPEC & ' /c ' & '(' & $exfile & ' -c -r -d' & $CutDir & ' ' & $mdfile & ' >' & $erfile & ')', @ScriptDir)
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:36, 14-05-2007 | #399


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Вышла новая версия - AutoIt v3.2.4.1...

Из глобальных изменении:

*AutoIt теперь скомпилирован для Unicode, AutoIt3.exe для Unicode - AutoIt3A.exe для ANSI. Для более подробной информации смотрите эту страницу.
*Переписан инструмент для работы с окнами (Au3Info tool).
*Функции бинарных данных полностью переписаны - скрипты использующие эти функции будет необходимо изменить.

Справка на русском для AutoIt v3.2.4.0.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Последний раз редактировалось Creat0R, 15-05-2007 в 06:15. Причина: Добавил информацию о справке

Это сообщение посчитали полезным следующие участники:

Отправлено: 06:06, 15-05-2007 | #400



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 1.3] AutoIt скрипты

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Открывая 7z архив пишет не удаётся открыть как архив. Можно ли его восстановить? DreDo Хочу все знать 4 01-12-2009 18:54
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:. Vadikan AutoIt 1543 18-01-2009 10:46
[архив - Часть 2] AutoIt скрипты Vadikan AutoIt 985 21-01-2008 09:58
[Архив - Часть 1.2] AutoIt скрипты Dirk Diggler AutoIt 505 02-12-2006 11:00
[Архив - Часть 1.1] AutoIt скрипты EgOrus AutoIt 335 04-02-2006 16:58




 
Переход