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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - Удаление папок средствами Windows

Ответить
Настройки темы
Любой язык - Удаление папок средствами Windows

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


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

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


Помогите новичку плиз.
"Необходимо написать скрипт и запускать его при каждом выходе пользователя из виндоус. Скрипт должен очищать заданную директорию по определенной маске: директория -
C:\Users\"ПОЛЬЗОВАТЕЛЬ"\AppData\Local\1C\1cv8
удаляем только папки с названиями типа - 73c58a87-39c7-4571-b760-5a70505b271f
статично кол-во символов между дефисами, общее кол-во символов в названии и набор символов - любые цифры и буквы без спецсимволов и пробелов."
Вобщем не могу понять как задачу на удаление папок с определённым количеством символов,а остальные файлу и папки,чтоб оставались целыми.

Отправлено: 23:20, 09-07-2017

 

Ветеран


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

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


Цитата megaloman:
В CMD есть риск непредсказуемого поведения команды с маской. »
Везде есть . Поскольку везде используются одни и те же функции WinAPI.


Цитата megaloman:
СтОит ли игра свеч? »
Коль это будет более правильно — конечно, стоит. «Более громоздко» — ну, добавится несколько строк для регулярки, например:
Скрытый текст
Код: Выделить весь код
Option Explicit

Dim objFSO

Dim objFolder

Dim strSourceFolder

Dim objRegExp


Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

Set objFolder = WScript.CreateObject("Shell.Application").NameSpace("shell:Local AppData")

If Not objFolder Is Nothing Then
	strSourceFolder = objFSO.BuildPath(objFolder.self.Path, "1C\1cv8")
	
	If objFSO.FolderExists(strSourceFolder) Then
		With WScript.CreateObject("VBScript.RegExp")
			.IgnoreCase = True
			.Pattern = "^[0-9a-f]{8}(?:-[0-9a-f]{4}){4}[0-9a-f]{8}$"
			
			For Each objFolder In objFSO.GetFolder(strSourceFolder).SubFolders
				If .Test(objFolder.Name) Then
					objFolder.Delete True
				End If
			Next
		End With
	Else
		WScript.Echo "Can't find source folder [" & strSourceFolder & "]."
		WScript.Quit 2
	End If
Else
	WScript.Echo "Can't connect to Local AppData folder."
	WScript.Quit 1
End If

Set objFSO = Nothing

WScript.Quit 0


Цитата mwz:
...а буквенные представления 16-ричных значений, т.е. шесть букв: от A до F. »
Именно так. Поскольку название — явно одно из представлений UUID — Википедия.


Цитата megaloman:
Спрогнозировать иные выверты работы команд CMD с маской не берусь, сталкивался с ними не раз, для меня это непредсказуемо, хотя когда-то на форуме объяснение звучало »
Коварные короткие имена, особенно для имён, не входящих в A-Z.
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:41, 11-07-2017 | #11



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

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


Ветеран


Contributor


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

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


Мой vbs-скрипт с регулярными выражениями и настройками на вид имени
Код: Выделить весь код
Plan = Array(8, 4, 4, 4, 12)        ' Число символов в каждой части имени
Delim = "-"                         ' Разделитель
Mask = "[0-9a-z]"                   ' Маска допустимых символов в имени

Set WShell = CreateObject("WScript.Shell")
BoxIn = WShell.ExpandEnvironmentStrings("%LocalAppData%") + "\1C\1cv8"

Set FSO = CreateObject("Scripting.FileSystemObject")

On Error Resume Next
Set InBox = FSO.GetFolder(BoxIn)
If Err.Number <> 0 Then
    MsgBox "Папка" + vbCrLf + vbCrLf + BoxIn + vbCrLf + vbCrLf + Err.Description
    On Error GoTo 0
Else
    On Error GoTo 0
    N1 = LBound(Plan)
    N2 = UBound(Plan)
    NLen = 0
    
    For i = N1 To N2
        InMask = InMask + Mask + "{" + CStr(Plan(i)) + "}"
        NLen = NLen + Plan(i)
        If i <> N2 Then
            InMask = InMask + Delim
            NLen = NLen + 1
        End If
    Next

    Set RegMaska = New RegExp
    RegMaska.Pattern = InMask
    RegMaska.IgnoreCase = True

    Set AllFolders = InBox.SubFolders
    For Each Folder In AllFolders
        NameFolder = Folder.Name
        If NLen = Len(NameFolder) Then
            If RegMaska.Test(NameFolder) Then
                On Error Resume Next
                LL = FSO.DeleteFolder(BoxIn + "\" + NameFolder, True)
                If Err.Number <> 0 Then
                    MsgBox "Папка" + vbCrLf + vbCrLf + BoxIn + "\" + NameFolder + vbCrLf + vbCrLf + Err.Description
                End If
                On Error GoTo 0
'                MsgBox Folder.Name
            End If
        End If
    Next
End If
Если в самом деле в имени папок только шестнадцатиричные числа, то маску нужно указать как
"[0-9a-f]"

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 11-07-2017 в 11:56.


Отправлено: 11:09, 11-07-2017 | #12

mwz mwz вне форума

Аватара для mwz

Ушел из жизни


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

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


Цитата megaloman:
Mask = "[0-9a-z]" »
Для данного случая, как вы и сказали в конце, a-f
Вариант заглавных букв (A-F) не учитывается? Я бы учёл на всякий случай.

-------
Mikhail Zhilin


Отправлено: 11:17, 12-07-2017 | #13


Ветеран


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

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


Цитата mwz:
Вариант заглавных букв (A-F) не учитывается? Я бы учёл на всякий случай. »
Учитывается:
Цитата megaloman:
RegMaska.IgnoreCase = True »
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:17, 12-07-2017 | #14



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - Удаление папок средствами Windows

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Установка - Удаление папок с установочного диска Windows 7 Pavel_01 Microsoft Windows 7 1 26-01-2015 17:08
Разное - Удаление ненужных (пустых) папок в Windows 7 Макс Фолдер Microsoft Windows 7 2 29-06-2013 18:25
Установка - [решено] Удаление папок Windows.old Doggy Microsoft Windows 8 и 8.1 3 06-03-2012 18:54
Разное - как запланировать удаление файла средствами Windows jam2551 Microsoft Windows 2000/XP 4 01-10-2010 04:09
Доступ - [решено] Можно ли проследить средствами Windows удаление файлов EvgeniyQQQ Microsoft Windows 2000/XP 8 09-08-2007 14:46




 
Переход