View previous topic :: View next topic |
Author |
Message |
keiran_green
Joined: 18 Nov 2011 Posts: 130 Location: Хабаровск
|
(Separately) Posted: Fri Dec 02, 2011 13:52 Post subject: Скрипт для очистки flash от: "все папки стали ярлыками". |
|
|
Cкрипт отображает скрытые папки на флешке и перемещает найденные ярлыки в отдельную папку.
Код скрипта: Code: | /*
################################################################################
Удаление файлов lnk и восстановление скрытых папок.
последнее изменение 08.12.2011
отображает скрытые папки и перемещает файлы *.lnk в отдельную папку
Использование: скопировать файл в папку или в корень флешки и запустить
PS: проверяет только текущую папку
PPS: для проверки и пермешения файла autorun.inf
в строке
autorun_check = 0;
заменить на
autorun_check = 1;
################################################################################
Для создания кнопки в Total Commander перетащить файл скрипта на панель TC,
в свойствах появившейся кнопки, в поле "параметры" указать '%P%N' (без кавычек)
Использование в ТС: выбрать любой файл/папку в панели и нажать на кнопку.
Для проверки autorun'a дописать в конец строки параметров '/autorun' т.е.
получиться должно так:
'%P%N /autorun'
################################################################################
*/
var
fso = new ActiveXObject("Scripting.FileSystemObject"),
WshShell = WScript.CreateObject("WScript.Shell"),
attr = new Array (17,18,19,20,21,22,23,24,25,26,48,49,50,51,55,56,57,58,null),
autorun_check = 0, //1 - будет проверять наличие файл autorun.inf
s = "",
FldrCnt = 0,
LnkCount = 0,
intButton = -1,
d = new Date(),
DateTime = d.getDay() +"."+ d.getMonth()+"."+d.getYear()
+"#"+d.getHours()+"."+d.getMinutes()+"."+d.getSeconds();
//если был передан аргумент проверки autorun...
if (WScript.Arguments.Named.exists("autorun"))
{
autorun_check = 1;
}
if (autorun_check == 1)
{
autorun_exist = false;
AutorunName = "\autorun_" + DateTime +".inf";
}
if (WScript.Arguments.UnNamed.length == 0)
{
script = fso.GetFile(WScript.ScriptFullName);
f = fso.GetFolder(script.ParentFolder);
fFldrLnk = script.ParentFolder + "\\!ярлыки\\";
text = "Данный скрипт отображает скрытые папки + перемещает\nвсе найденные ярлыки в " +
"папку \"" +fFldrLnk+DateTime+"\\\"\n\nИспользование:\nскопировать скрипт в корень флешки, запустить\nи согласиться на " +
"лечение.\n\nЗапустить лечение в папке \"" + script.ParentFolder + "\" ?"
intButton = WshShell.Popup (text, -1, "Устранение последствий вирусов", 4)
}
if ((WScript.Arguments.UnNamed.length != 0) && (intButton != 6))
{
f = fso.GetFolder(fso.GetParentFolderName(WScript.Arguments(0)));
fFldrLnk = f + "\\!ярлыки\\";
}
if ((intButton == 6) || (WScript.Arguments.UnNamed.length != 0))
{
sFiles = new Enumerator(f.Files )
for (; !sFiles.atEnd(); sFiles.moveNext())
{
ext = fso.GetExtensionName(sFiles.item().Name);
if ((ext == "lnk") ||(ext == "LNK")
||(ext == "Lnk") ||(ext == "LNk")
||(ext == "LNK") ||(ext == "lNK")
||(ext == "lnK") ||(ext == "LnK")
||(ext == "lNk"))
{
if (fso.FolderExists(fFldrLnk) == false)
{
fso.CreateFolder(fFldrLnk)
}
if (fso.FolderExists(fFldrLnk +DateTime+"\\") == false)
{
fso.CreateFolder(fFldrLnk +DateTime+"\\")
}
s = sFiles.item().Name
fso.MoveFile(sFiles.item().Name , fFldrLnk + DateTime+"\\")
LnkCount++;
sFiles = new Enumerator(f.Files);
}
if (autorun_check == 1)
{
if (sFiles.item().Name == "autorun.inf")
{
if (fso.FolderExists(fFldrLnk) == false)
{
fso.CreateFolder(fFldrLnk)
}
sFiles.item().Attributes = 0;
fso.MoveFile(sFiles.item().Name , fFldrLnk + AutorunName )
autorun_exist = true;
sFiles = new Enumerator(f.Files);
}
}
}
fFldr = new Enumerator(f.SubFolders);
for (; !fFldr.atEnd(); fFldr.moveNext())
{
for (i = 0; attr[i] != null; i++)
{
if (fFldr.item().Attributes == attr[i])
{
fFldr.item().Attributes = 0;
FldrCnt++;
break;
}
}
}
s = "Oбработано:\n" +
" скрытых папок: " + FldrCnt +"\n"+
" ярлыков: " + LnkCount ;
if ((autorun_check == 1) && (autorun_exist))
{
s = s + "\n\nОбнаружен и перемещен autorun.inf файл.";
}
WshShell.Popup(s, -1, "Готово", 64)
}
|
Действие скрипта:
- Скрипт проверяет текущую папку на наличие скрытых папок и ярлыков;
- Атрибут "скрытый" у папок убирается;
- Все найденные ярлыки перемещаются в папку "!ярлыки";
- Файл "autorun.inf" переименовывается* (добавляется дата в имя файла) и тоже перемещается в папку "!ярлыки";
* - если проверка autorun файла включена
Last edited by keiran_green on Thu Dec 08, 2011 02:56; edited 5 times in total |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Dec 02, 2011 14:32 Post subject: |
|
|
keiran_green
Много воды в описаниях. 134 строки - не повод, чтобы выкладывать в MIME и повторять то, что написано в шапке скрипта. Советую посмотреть как тут шапки вообще оформляются. Вся остальная информация дана в памятке. Флаг проверки лучше реализовывать через параметр и цифры 0/1, например.
А при выделении папки не работает, потому что в 59 строке применяется метод GetFile. Надо бы
Code: | script = fso.GetFile(WScript.Arguments.UnNamed.Item(0));
f = fso.GetFolder(script.ParentFolder); | заменить на
Code: | f = fso.GetFolder(fso.GetParentFolderName(WScript.Arguments(0)); |
|
|
Back to top |
|
|
keiran_green
Joined: 18 Nov 2011 Posts: 130 Location: Хабаровск
|
(Separately) Posted: Fri Dec 02, 2011 14:33 Post subject: |
|
|
Flasher
Спасибо, завтра исправлю. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Dec 02, 2011 14:39 Post subject: |
|
|
keiran_green
Ок. Хотя я так вообще и не понял, зачем тут %P%N, если достаточно %P или WSH.CurrentDirectory (с пустым путём запуска).
P.S. CureIt! уже давно как триальный... |
|
Back to top |
|
|
keiran_green
Joined: 18 Nov 2011 Posts: 130 Location: Хабаровск
|
(Separately) Posted: Sat Dec 03, 2011 01:43 Post subject: |
|
|
Обновил. скрипт.
Flasher
Если оставить только %P, тогда при запуске пишет "Разрешение отклонено" |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Dec 03, 2011 11:22 Post subject: |
|
|
keiran_green
Не вижу js-кода и убора воды (всё от кода до "Действие скрипта" можно выкинуть). Каждый раз вытаксивать из MIME и смотреть проблему желания нет.
Да, как вариант - в цикле массива fso.Drives перебрать if (fso.GetDrive(n).DriveType = 1) и работать со всеми доступными флешками. |
|
Back to top |
|
|
keiran_green
Joined: 18 Nov 2011 Posts: 130 Location: Хабаровск
|
(Separately) Posted: Sat Dec 03, 2011 14:27 Post subject: |
|
|
Обновил скрипт.
Добавил параметр /autorun - для проверки авторана из тотала. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Dec 03, 2011 14:41 Post subject: |
|
|
keiran_green wrote: | Добавил параметр ... | Тогда "PPS:..." из описания нужно убрать.
Вместо "WScript.Arguments.UnNamed.length != 0" проще "WScript.Arguments.Count > 0". keiran_green wrote: | Если оставить только %P, тогда при запуске пишет "Разрешение отклонено" | Т.е. вместо "f = fso.GetFolder(fso.GetParentFolderName(WScript.Arguments(0)))" пишем "f = WScript.Arguments(0)" и ругается? |
|
Back to top |
|
|
Serge Yolkin
Joined: 25 Jul 2009 Posts: 664
|
(Separately) Posted: Sun Dec 04, 2011 00:06 Post subject: |
|
|
keiran_green
Стесняюсь спросить: а почему переменная fso локальная, а остальные - глобальные? |
|
Back to top |
|
|
keiran_green
Joined: 18 Nov 2011 Posts: 130 Location: Хабаровск
|
(Separately) Posted: Sun Dec 04, 2011 12:19 Post subject: |
|
|
Serge Yolkin wrote: | переменная fso локальная, а остальные - глобальные? |
Потому что я не особо разбираюсь в WSH. На это как-то внимания не обращал.
Ну чтож, значит будем читать теорию... |
|
Back to top |
|
|
Serge Yolkin
Joined: 25 Jul 2009 Posts: 664
|
(Separately) Posted: Sun Dec 04, 2011 13:08 Post subject: |
|
|
keiran_green
Не навязываю свое вИдение, отформатил скрипт для собственного удобства (чтобы прочитать): Code: | var
attr=new Array(17,18,19,20,21,22,23,24,25,26,48,49,50,51,55,56,57,58,null),
autorun_check=0, //1 - будет проверять наличие файл autorun.inf
autorun_exist,
AutorunName,
d,
f,
fFldr,
fFldrLnk,
FldrCnt=0,
fso=new ActiveXObject('Scripting.FileSystemObject'),
intButton=-1,
LnkCount=0,
s='',
script,
sFiles,
text,
WshShell=WScript.CreateObject('WScript.Shell');
//если был передан аргумент проверки autorun...
if(WScript.Arguments.Named.exists('autorun'))autorun_check=1;
if(autorun_check==1){
d=new Date();
autorun_exist=false;
AutorunName='\autorun_'+d.getDay()+'.'+d.getMonth()+'.'+d.getYear()+
'#'+d.getHours()+'.'+d.getMinutes()+'.'+d.getSeconds()+'.inf';
}
if(WScript.Arguments.UnNamed.length==0){
script=fso.GetFile(WScript.ScriptFullName);
f=fso.GetFolder(script.ParentFolder);
fFldrLnk=script.ParentFolder+'\\!ярлыки\\';
text='Данный скрипт отображает скрытые папки+перемещает\nвсе найденные ярлыки в папку «'+
fFldrLnk+'»\nИспользование:\n\tскопировать скрипт в корень флешки, запустить\nи согласиться на '+
'лечение.\nЗапустить лечение в папке «'+script.ParentFolder+'» ?';
intButton=WshShell.Popup(text,-1,'Устранение последствий вирусов',4);
}
if((WScript.Arguments.UnNamed.length!=0)&&(intButton!=6)){
f=fso.GetFolder(fso.GetParentFolderName(WScript.Arguments(0)));
fFldrLnk=f+'\\!ярлыки\\';
}
if((intButton==6)||(WScript.Arguments.UnNamed.length!=0)){
sFiles=new Enumerator(f.Files);
for(;!sFiles.atEnd();sFiles.moveNext()){
var ext=fso.GetExtensionName(sFiles.item().Name);
if(ext.toLowerCase()=='lnk'){
if(fso.FolderExists(fFldrLnk)==false)fso.CreateFolder(fFldrLnk)
fso.MoveFile(sFiles.item().Name,fFldrLnk);
LnkCount++;
sFiles=new Enumerator(f.Files);
}
if(autorun_check==1){
if(sFiles.item().Name=='autorun.inf'){
if(fso.FolderExists(fFldrLnk)==false)fso.CreateFolder(fFldrLnk);
sFiles.item().Attributes=0;
fso.MoveFile(sFiles.item().Name,fFldrLnk+AutorunName);
autorun_exist=true;
sFiles=new Enumerator(f.Files);
}
}
}
fFldr=new Enumerator(f.SubFolders);
for(;!fFldr.atEnd();fFldr.moveNext()){
for(i=0;attr[i]!=null;i++){
if(fFldr.item().Attributes==attr[i]){
fFldr.item().Attributes=0;
FldrCnt++;
break;
}
}
}
s='Oбработано:\n'+
'\tскрытых папок: '+FldrCnt+'\n'+
'\tярлыков: '+LnkCount;
if((autorun_check==1)&&(autorun_exist)){
s=s+'\n\nОбнаружен и перемещен autorun.inf файл.';
}
WshShell.Popup(s, -1, 'Готово', 64);
} | Из теории: чтобы объявить локальную переменную, используется var, иначе переменная глобальная. Чтобы не писать это "var" перед каждой строчкой присвоения, можно после одного var перечислить все переменные (с присвоением или без) через запятую, точка с запятой заканчивает перечисление. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Dec 04, 2011 20:24 Post subject: |
|
|
Не выдержал...
По-человечески (vbs):
Code: | '============================================================================
' 1. Снять у папок в корнях флешек атрибуты "скрытый" и "системный"
' 2. Переместить ярлыки, имеющие данные атрибуты, в папку "Скрытые ярлыки"
' 3. Добавить к имени autorun.inf дату и переместить в папку "Скрытые ярлыки"
' Параметр по желанию (флаг на обработку autorun.inf): <любой символ>
'============================================================================
With CreateObject("Scripting.FileSystemObject")
For Each D in .Drives
If .GetDrive(D).DriveType = 1 Then
HLinks = D & "\Скрытые ярлыки\"
Set Fd = CreateObject("Shell.Application").NameSpace(D & "\")
For Each F in .GetFolder(D).SubFolders
Attr = Fd.GetDetailsOf(Fd.ParseName(F.Name), 6)
A = .GetFolder(F).Attributes
H = InStr(Attr, "H") : S = InStr(Attr, "S")
If H Then A = A - 2 : If S Then A = A - 4
If H Or S Then .GetFolder(F).Attributes = A
Next
For Each F in .GetFolder(D).Files
Set PN = Fd.ParseName(F.Name)
Attr = Fd.GetDetailsOf(PN, 6)
If PN.IsLink And (InStr(Attr, "H") Or InStr(Attr, "S")) Then
If Not .FolderExists(HLinks) Then .CreateFolder(HLinks)
F.Move HLinks
End If
If WScript.Arguments.Count Then
If F.Name = "autorun.inf" Then _
F.Move HLinks & "autorun_" & Replace(Replace(Now, "/", "."), ":", "-") & ".inf"
End If
Next
End If
Next
End With
CreateObject("WScript.Shell").Popup "Исполнено!", 1.4, "Результат", 64
WScript.Quit |
|
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|