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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] WSH скрипт для удаления файлов (логика скрипта внутри)

Ответить
Настройки темы
VBS/WSH/JS - [решено] WSH скрипт для удаления файлов (логика скрипта внутри)

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


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

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


Изменения
Автор: Francyz
Дата: 17-05-2010
Есть скрипт для удаления пустых папок (взял из соседней темы)
Код: Выделить весь код
strFldr = Wscript.arguments.Item(0)

Dim oD, cD, oI

Set objFSO = CreateObject("Scripting.FileSystemObject")
DelBlank strFldr

Sub DelBlank(sFldr)

Set oD = objFSO.GetFolder(sFldr)
Set cD = oD.SubFolders
   
	For Each oI In cD
		DelBlank oI.Path
	Next
	
	If oD.Size = 0 Then
		wscript.echo OD + " - Folder delete"
		oD.Attributes = 0
		oD.Delete
	else
		wscript.echo OD + " - Folder is no Empty"
	End If
End Sub
Но у меня проблема в его развитии дальше.

Логика скрипта на WSH такая:
1 - Нужен скрипт, который будет удалять файлы по маске (т.е. определенные типы файлы, которые занесены к примеру в тот же test.txt);
2 - Нужно задавать исключения на папки, которые будет пропускать (те же Windows, Programm Files и т.д., чтобы не стереть лишнее);
3 - Если файл занят - он его пропускает и движется дальше;
4 - Ну соответственно, если папки пустые - он их тоже удаляет;
5 - и последнее, чтобы он не трогал подключаемые диски (флешки, сетевые диски), а работал только с локальными (т.е. у которых значение DriveType==2 - это по-моему обозначение как раз-таки локальных);

Немного покопавшись в книгах нашел пару записей, к примеру по пункту 2, вот есть "Выполнение программа для всех подпапок":
Код: Выделить весь код
Sub GoSubFolder (objDIR)
	If objDIR <> "\System Volume Information" Then
		MainSub objDIR
		For Each eFolder in objDIR.SubFolders
			GoSubFolders eFolder
		Next
	End If
End Sub
-т.е. получается он будет выполнять для всех папок, кроме указанной Volume. Я так понял, чтобы остальные не трогал нужно добавить в условие все папки, которые ты не хочешь использовать - по типу <> "\System Volume Information" or "\Windows" or "\Programm Files" и т.д.

Но прежде чем в какой-то папке выполнять он должен с ней соединиться, и получается вот такой код:
Код: Выделить весь код
Function GetFolder(sFOLDER)
	On Error Resume Next
	Set GetFolder = FSO.GetFolder(sFOLDER)
	If Err.Number <> 0 Then
		Wscript.Echo "Error connecting to folder:" & sFOLDER & VBlf & "[" & Err.Number & "]" & Err.Description
		Wscript.Quit Err.Number
	End If
End Function
Для удаления файла используется подобный код
Код: Выделить весь код
Sub DelFile(sFILE)
	On Error Resume Next
	FSO.Delete File sFILE, True
	If Err.Number <> 0 Then
		Wscript.Echo "Error deleting file: " & sFILE
	End If
End sub

Вот чтобы удалить все файлы определенного типа, нужно выполнить:
Код: Выделить весь код
Set FSO = CreateObject("Scripting.FileSystemObject")
sDIR = "directory"
sEXT = "EXT"

Set objDIR = GetFolder(sDIR)
GoSubFolders objDIR

Sub MainSub (objDIR)
	For Each efile in obj.DIR.Files
		fEXT = FSO.GetExtensionName(efile.Path)
		If LCase(fEXT) = LCase(sEXT) Then
			DelFile efile
		End If
	Next
End sub
где directory- те папки где искать файлы, а EXT - сами расширения файлов

Получается чтобы скрипт нормально работал нужно, сначала написать GoSubFolder , потом GetFolder, потом DelFile и после этого уже "Определение конкретного типа", но у меня не получается соединить это воедино, чтобы оно нормально работало, все время вылезает какая-нибудь ошибка и не получается разобраться с пунктами 3 и 5

Может у кого, есть уже подобные скрипты. Буду рад любой помощи.

Отправлено: 16:10, 13-05-2010

 

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


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

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


amel27, Добрый день. Сейчас обнаружил небольшой баг с исключениями. Я так понял они только в корне диска работают, а если данная папка находиться в подпапке, то он удаляет все данные в ней.
К примеру добавлена папка в исключения
Код: Выделить весь код
   "^.:\\Tester$", _
И скрипт пашет если вариант вот такой: "C:\\Tester", но если "C:\\Новая папка\Tester" и скрипт удаляет все файлы в ней. Я так понял что дело в символах перед наименованием папки ^.:\\ - они обозначают, как раз только букву диска, не распространясь на папки.

Отправлено: 11:08, 25-05-2010 | #11



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

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


Googler


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

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


Цитата Francyz:
^.:\\ - они обозначают, как раз только букву диска, не распространясь на папки »
именно так, не зря же дал линк по регулярным выражениям, чтобы при необходимости меняли фильтры, любым папкам с именем "Tester" соответствует шаблон: "\\Tester$" ("^" - привязка шаблона к началу имени файла, "$" - к концу имени, "." - любой символ по аналогии с "?" в батниках)
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:22, 25-05-2010 | #12



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] WSH скрипт для удаления файлов (логика скрипта внутри)

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - [решено] Скрипт для удаления старых файлов и папок из определенной папки avfiga Скриптовые языки администрирования Windows 71 07-01-2023 18:50
Любой язык - нужен скрипт для удаления всех файлов кроме нужных для запуска Windows XP Dark Ange1 Скриптовые языки администрирования Windows 11 07-03-2010 13:34
[решено] Скрипт для удаления нужных слов в ini файле Pozia AutoIt 23 27-10-2009 18:42
MSFT SQL Server - [решено] Преобразование скрипта для Oracle в скрипт для SQL EvgeniyQQQ Программирование и базы данных 3 25-03-2009 01:26
Скрипт для удаления директорий dallas Программирование и базы данных 5 15-01-2003 19:28




 
Переход