Что нового

Блокировка и разблокировка папки через команды CMD

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Не пойму в чем дело, команды отказываются правильно работать, есть 2 файла *.bat

Locker.bat
Код:
attrib -s -h -A Папка
ren Папка "FF Lock.{645ff040-5081-101b-9f08-00aa002f954e}"
attrib +s "FF Lock.{645ff040-5081-101b-9f08-00aa002f954e}"

И

Unlocker.bat
Код:
attrib -s "FF Lock.{645ff040-5081-101b-9f08-00aa002f954e}"
ren "FF Lock.{645ff040-5081-101b-9f08-00aa002f954e}" Папка

Locker.bat превращает папку в данном случае в корзину, всё что было в папке ни куда не девается, но при открытии этой папки - попадаешь в корзину, Unlocker.bat разблокирует папку и возвращает ей нормальный вид, пытался сделать это через AutoIt

Код:
Global Const $ControlPanel = '{21ec2o2o-3aea-1o69-a2dd-08002b30309d}'

LockFolder('C:\FF', $ControlPanel)

Func LockFolder($sFolder, $CLSID)
	Local $sPath = StringRegExp($sFolder, '(?s)(.*)\\(.*)', 3)
	Run(@ComSpec & ' /C attrib -s -h -a ' & $sPath[1] & ' && ' & 'ren ' & $sPath[1] & ' "' & $sPath[1] & '.' & $CLSID & '"' & ' && ' & 'attrib +s "' & $sPath[1] & '.' & $CLSID & '"', $sPath[0], @SW_HIDE)									 
EndFunc	

Func UnlockFolder($sFolder, $CLSID)
	Local $sPath = StringRegExp($sFolder, '(?s)(.*)\\(.*)', 3)
	RunWait(@ComSpec & ' /C attrib -s "' & $sPath[1] & '.' & $CLSID & '"' & 'ren "' & $sPath[1] & '.' & $CLSID & '" ' & $sPath[0], '', @SW_HIDE)									 									   
EndFunc


Но вместо того чтоб заблокировать папку и сделать её корзиной, код просто переименовывает папку в FF.{21ec2o2o-3aea-1o69-a2dd-08002b30309d}

Также пробовал просто создать *.bat с готовым кодом, после создания проверял код bat файла, всё было как надо, но работать не хотел, если вручную написать такой bat, то он заработает, подскажите в чём проблема?
 

AZJIO

Меценат
Меценат
Сообщения
2,903
Репутация
1,200
Re: Не правильный вызов команд CMD через Run

Viktor1703
Обычно копирую ком-строку в функцию MsgBox для вывода.

Кстати, каталог {21ec2o2o-3aea-1o69-a2dd-08002b30309d}
должно быть {21ec2020-3aea-1069-a2dd-08002b30309d}'
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
У меня так работает (папка 111):

Locker:
Код:
FileSetAttrib('111', '-SHA')
DirMove('111', 'FF Lock.{645ff040-5081-101b-9f08-00aa002f954e}')
FileSetAttrib("FF Lock.{645ff040-5081-101b-9f08-00aa002f954e}", "+S")


Unlocker:
Код:
Filesetattrib("FF Lock.{645ff040-5081-101b-9f08-00aa002f954e}", '-s')
DirMove("FF Lock.{645ff040-5081-101b-9f08-00aa002f954e}", '111')
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Спасибо, всё заработало, правда не через команду Run(), а через тот пример который привёл Zaramot


Добавлено:
Сообщение автоматически объединено:

Вот собрал до кучи:

Код:
Global Const $CLSID_CONTROL_PANEL   = '{21ec2020-3aea-1069-a2dd-08002b30309d}'
Global Const $CLSID_MY_COMPUTER     = '{20d04fe0-3aea-1069-a2d8-08002b30309d}'
Global Const $CLSID_NETWORK_PLACES  = '{208d2c60-3aea-1069-a2d7-08002b30309d}'
Global Const $CLSID_NET_COMPUTER    = '{1f4de370-d627-11d1-ba4f-00a0c91eedba}'
Global Const $CLSID_NET_CONNECT     = '{7007acc7-3202-11d1-aad2-00805fc1270e}'
Global Const $CLSID_PRINTERS_FAX    = '{2227a280-3aea-1069-a2de-08002b30309d}'
Global Const $CLSID_RECUCLE_BIN     = '{645ff040-5081-101b-9f08-00aa002f954e}'
Global Const $CLSID_SCANNER_CAM     = '{e211b736-43fd-11d1-9efb-0000f8757fcd}'
Global Const $CLSID_WEB_FOLDER      = '{bdeadf00-c265-11d0-bced-00a0c90ab50f}'

;LockFolder('C:\FF', $CLSID_WEB_FOLDER)
;UnlockFolder('C:\FF', $CLSID_WEB_FOLDER)

Func LockFolder($sPath, $CLSID)
	FileSetAttrib($sPath, '-SHA')
    DirMove($sPath, $sPath & '.' & $CLSID)
    FileSetAttrib($sPath & '.' & $CLSID, '+S')
EndFunc	

Func UnlockFolder($sPath, $CLSID)
    Filesetattrib($sPath & '.' & $CLSID, '-s')
    DirMove($sPath & '.' & $CLSID, $sPath)
EndFunc
 
Верх