Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для gora

Ушёл из жизни


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

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


Код: Выделить весь код
@Echo Off
Title USB Manager
SetLocal EnableDelayedExpansion
Set err=0
Set cnt=0
Set choice=1
For /F "tokens=* delims=" %%a In ('usr list -s') Do Call :_parser "%%a"
If %cnt%==0 Exit
If %cnt%==1 GoTo :_OneDrv
Set choice=
Set disconnect=0
Set connect=0
Set buttons="Стоп все" "Вкл. все" "Отмена"
Set Mesg1=[Стоп все] - остановить все устройства~n[Вкл. все]~t  - вернуть все устройства обратно~n~n
For /L %%i In (1,1,%cnt%) Do (
	If "!status_drv%%i!"=="" (
		Set connect=1
		Set Mesg1=!Mesg1![Стоп !drv%%i!]~t  - остановить устройство !drv%%i!~n
		Set buttons=!buttons! "Стоп !drv%%i!"

	) Else (
		Set disconnect=1
		Set Mesg1=!Mesg1![Вкл. !drv%%i!]~t  - вернуть устройство !drv%%i! обратно *~n
		Set buttons=!buttons! "Вкл. !drv%%i!"
	)
)
If %connect%==1 (
rem Set Mesg1=!Mesg1!~n[Откл. все] - остановить все устройства
rem Set buttons=!buttons!"Откл. все" 
)
If %disconnect%==1 (
	Set Mesg1=!Mesg1!~n* Это действие также перезагрузит другие~n   устройства, подключенные к USB хабу
rem 	Set Mesg1=!Mesg1!~n[Вкл. все] - вернуть все устройства обратно~n* Это действие также перезагрузит другие~n   устройства, подключенные к USB хабу
rem Set buttons=!buttons!"Вкл. все" 
)

7zbut -msgbox "!Mesg1!" "USB Manager" db1:fl33:bw85:bpl3 !buttons!>nul
Set presskey=!errorlevel!
If !presskey!==20 Exit
If !presskey!==1 (
	Set cntRet=0
	For /L %%i In (1,1,%cnt%) Do If "!status_drv%%i!"=="" (
		Set /A cntRet +=1
		Set drvc=!drv%%i!
		Set listdrv=!listdrv!~n!fulldrv%%i!
		Call :_Stop !drv%%i!
	)
	If !cntRet!==1 (
		Call :_balloon "Устройство !drvc! остановлено"
	) Else Call :_balloon "Остановлены устройства:!listdrv!"
	Exit
)
If !presskey!==2 (
	Set cntRet=0
	For /L %%i In (1,1,%cnt%) Do If Not "!status_drv%%i!"=="" (
		Set /A cntRet +=1
		Set drvc=!drv%%i!
		Set listdrv=!listdrv!~n!fulldrv%%i!
		Call :_Return !drv%%i!
	)
	If !cntRet!==1 (
		Call :_balloon "Устройство !drvc! возвращено обратно"
	) Else Call :_balloon "Возвращены обратно устройства:!listdrv!"
	Exit
)
If !presskey! GTR 20 Set /A choice=presskey - 20
:_OneDrv
If "!status_drv%choice%!"=="" (
	Call :_Stop !drv%choice%!
	Call :_balloon "Устройство !drv%choice%! остановлено"
) Else (
	Call :_Return !drv%choice%!
	Call :_balloon "Устройство !drv%choice%! возвращено обратно"
)
Exit

:_Return
usr return -d %~1 >Nul
GoTo :EOF

:_Stop
usr stop -d %1 >Nul
Set err=%errorlevel%
If %err%==0 GoTo :EOF
If %err%==2 (
	usr wholocks -d %1>Nul
	Set err=!errorlevel!
	If !err!==5 GoTo :_message
	If !err!==6 GoTo :_message

	Set Mesg1=Устройство ~x28%1~x29 заблокировано и не может быть остановлено.~n~nФайл блокирующего процесса~n======================
	Set cntPr=0
	For /F "skip=4 tokens=1*" %%a In ('usr wholocks -d %1') Do Call :_lockproc "%%a" "%%b"
	If "!cntPr!"=="1" (
		Set Mesg1=!Mesg1!~n~n1. Остановить процесс ~q!proc!~q и повторить операцию~n2. ~qУбить~q процесс ~q!proc!~q и повторить операцию
	) Else (
		Set Mesg1=!Mesg1!~n~n1. Остановить ВСЕ блокирующие процессы и повторить операцию~n2. ~qУбить~q ВСЕ блокирующие процессы и повторить операцию
	)
	7zbut -msgbox "!Mesg1!" "USB Manager" db1:fl49 "1 вариант" "2 вариант" "Отмена">nul
	Set presskey=!errorlevel!
	If !presskey!==20 Exit
	If !presskey!==1 usr forcedstop -d %1 >Nul
	If !presskey!==2 For /L %%i In (1,1,!cntPr!) Do TaskKill /F /IM !proc%%i!>Nul
	GoTo :_Stop
)
:_message
If %err%==1 Set Mesg=Устройство %1 не найдено
If %err%==3 Set Mesg=Неверный синтаксис команды
If %err%==4 Set Mesg=Неизвестная команда
If %err%==5 Set Mesg=Не найдены процессы блокирующие устройство %1 или оно уже свободно
If %err%==6 Set Mesg=Произошла ошибка при поиске процессов блокирующих устройство %1
Call :_balloon "%Mesg%"
GoTo :EOF

:_lockproc
Set /A cntPr +=1
rem Set tab=
Set proc=%~1
Set proc!cntPr!=%~1
rem If "!proc:~7,1!"=="" Set tab=~t	
Set Mesg1=!Mesg1!~n%~2
GoTo :EOF

:_parser
Set /A cnt +=1
Set ta=%~1
Set fulldrv%cnt%=!ta:~3!
If Not "!ta!"=="!ta:safely removed=!" (
	Set status_drv%cnt%=1
	Set fulldrv%cnt%=!ta:~3,-20!
)
Set ta=!ta:*^(=!
Set drv%cnt%=!ta:~0,2!
GoTo :EOF

:_balloon
Start "" nircmd trayballoon "USB Manager" %1 "Zentimo.exe" 5000
Echo 
GoTo :EOF

Отправлено: 09:51, 16-05-2011 | #6