Цитата 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».