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

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

Ветеран


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

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


Цитата Diskretor:
Никоим образом не понадобится. Только для содержимого корневого каталога без рекурсивности. »
Цитата Diskretor:
Не допустимо. Только встроенные средства Винды и желательно универсальные для разных версий ОС. »
Тогда попробуйте WSH. Например, так:
Код: Выделить весь код
Option Explicit

Dim strFolder

Dim objFolder
Dim objFile

With WScript.Arguments.Named
	If .Count = 1 Then
		If .Exists("Path") Then
			strFolder = .Item("Path")
			
			With WScript.CreateObject("Scripting.FileSystemObject")
				If .FolderExists(strFolder) Then
					For Each objFolder In .GetFolder(strFolder).SubFolders
						ClearAttributes objFolder
					Next
					
					For Each objFile In .GetFolder(strFolder).Files
						ClearAttributes objFile
					Next
				Else
					WScript.Echo "Folder [" & strFolder & "] not found"
				End If
			End With
		Else
			WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ /Path:""<path to folder>"""
		End If
	Else
		WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ /Path:""<path to folder>"""
	End If
End With

WScript.Quit
'=============================================================================

'=============================================================================
Sub ClearAttributes(objValue)
	Const ReadOnly   = 1
	Const Hidden     = 2
	Const System     = 4
	
	Select Case TypeName(objValue)
		Case "Folder", "File"
			With objValue
				If .Attributes And (ReadOnly Or Hidden Or System) Then
					.Attributes = .Attributes And Not (ReadOnly Or Hidden Or System)
				End If
			End With
		Case Else
			' Nothing to do
	End Select
End Sub
'=============================================================================
Цитата Diskretor:
все остальные варианты чисто ради образовательных для меня целей - мне было бы очень интересно. »
Есть такое средство — Log Parser (Download: Log Parser 2.2 - Microsoft Download Center - Download Details). Если Вы мало-мальски знакомы с синтаксисом SQL, то рекомендую опробовать, ибо скорость его работы при множественных критериях отбора поистине впечатляет.

Например, поставленная выше задача отбора может выглядеть так:
Код: Выделить весь код
"C:\Program Files\Log Parser 2.2\LogParser.exe" "SELECT Path USING Attributes AS Attr FROM E:\Песочница\0101\*.* WHERE Attr LIKE '__S______' OR Attr LIKE '___H_____' OR Attr LIKE '____R____'" -i:FS -q:ON -oCodepage:1251 -recurse:0
или так:
Код: Выделить весь код
"C:\Program Files\Log Parser 2.2\LogParser.exe" "SELECT Path USING STRCNT(REPLACE_CHR(Attributes, 'SHR', '*'), '*') AS AnyAttrOfSHR FROM E:\Песочница\0101\*.* WHERE AnyAttrOfSHR > 0" -i:FS -q:ON -oCodepage:1251 -recurse:0
Полученный вывод команды разбирается, как и обычно, посредством «for /f …» с предварительным «chcp 1251».
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:53, 20-12-2011 | #9