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

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

Ответить
Настройки темы
CMD/BAT - [решено] Украинская "і" и скрытые файлы

Пользователь


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

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


Изменения
Автор: Dragokas
Дата: 18-12-2011
Как произвести действие (например attrib -r -s -h) над всеми файлами и папками, которые имеют любой из таких атрибутов: скрытый, системный, только для чтения. Среди них есть папки и файлы с украинской буквой і.

Пробовал код:
Код: Выделить весь код
for /f "delims=" %%a in ('dir /b /a *.*') do (attrib -s -h -r "%%~sna" >nul)
но он работает только с папками, да и без проверки атрибутов.
А когда я ввожу ключ /ashr, выдается все, что имеет все эти атрибуты одновременно, файлы имеющие только один из этих атрибутов опускаются.

2) Объясните, пожалуйста, что такое ~sn ?
и каким образом "істина" и "6C78~1", получаемое этим ключем, означают одну и ту же папку (что это за вариант 8.3 стандарта) ?

Отправлено: 21:50, 18-12-2011

 

Ветеран


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

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


Цитата Diskretor:
2) Объясните, пожалуйста, что такое ~sn ? »
Будут использоваться короткие имена в пути к файлу. Об этом явно сказано в:
Код: Выделить весь код
for /?
Цитата Diskretor:
и каким образом "істина" и "6C78~1", получаемое этим ключем, означают одну и ту же папку »
В Вашем конкретном случае «6C78~1» представляет собой короткое имя для записи «істина» (8.3 filename, Long filename, NTFS: 3.3 Hard links and short filenames).

Цитата Diskretor:
что это за вариант 8.3 стандарта »
Самый обычный вариант. По-русски, принципы формирования коротких имён для разных файловых систем, поддерживаемых ОС Windows, Вы можете посмотреть, например, здесь: 1. Концепции Windows NT: 1.5.3. Короткие имена.
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:54, 18-12-2011 | #2



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

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


Пользователь


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

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


Спасибо, почитаю. Остается вопрос: как совместить эти 6 команд в одну:
Код: Выделить весь код
for /f "delims=" %%a in ('dir /b /asd') do (attrib -s -h -r "%%~sna" >nul)
for /f "delims=" %%a in ('dir /b /ahd') do (attrib -s -h -r "%%~sna" >nul)
for /f "delims=" %%a in ('dir /b /ard') do (attrib -s -h -r "%%~sna" >nul)
for /f "delims=" %%a in ('dir /b /as') do (attrib -s -h -r "%%a" >nul)
for /f "delims=" %%a in ('dir /b /ah') do (attrib -s -h -r "%%a" >nul)
for /f "delims=" %%a in ('dir /b /ar') do (attrib -s -h -r "%%a" >nul)

-------
Alex Dragokas


Отправлено: 01:43, 19-12-2011 | #3


Ветеран


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

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


1. А есть ли какой-либо смысл делать отбор по атрибутам, коль Вы их и так сбрасываете? Просто снимайте эти атрибуты для всех папок/файлов, только и всего.
2. Мне не понятны эти игры с короткими именами. У меня «attrib.exe» отработал с приведённым Вами выше именем «істина» без каких-либо проблем.
Это сообщение посчитали полезным следующие участники:

Отправлено: 04:05, 19-12-2011 | #4


Пользователь


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

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


Цитата Iska:
1. А есть ли какой-либо смысл делать отбор по атрибутам, коль Вы их и так сбрасываете? Просто снимайте эти атрибуты для всех папок/файлов, только и всего. »
Да, есть смысл. Чтобы сократить время, расходуемое на изменение атрибутов (при огромном количестве папок и файлов, да еще и при включенном антивируснике - набор постоянно разный). Мне важно максимальное быстродействие. Приведенные 6 команд справляются на ура, но хотелось бы как-то лаконичней что-ли.

Цитата Diskretor:
2. Мне не понятны эти игры с короткими именами. У меня «attrib.exe» отработал с приведённым Вами выше именем «істина» без каких-либо проблем. »
То был другой пример.
А теперь попробуйте создать скрытую системную папку с именем "Книжная серия Прочесть обязательно і"
и применить этот код без ключа ~sn:
Код: Выделить весь код
for /f "delims=" %%a in ('dir /b /a') do (attrib -s -h -r "%%a" >nul)

-------
Alex Dragokas


Последний раз редактировалось Dragokas, 19-12-2011 в 12:27.


Отправлено: 12:15, 19-12-2011 | #5


Ветеран


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

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


Diskretor, ряд вопросов:

1. Вам действительно надо сие проделывать для содержимого одной папки, без вложенных? Или потом обработка вложенных папок понадобится?
2. Использование какого-либо стороннего средства допустимо по условиям задачи?

Цитата Diskretor:
А теперь попробуйте создать скрытую системную папку с именем "Книжная серия Прочесть обязательно і"
и применить этот код без ключа ~sn: »
Делайте так:
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

chcp 1251

for /f "delims=" %%i in ('dir /b /a') do attrib -s -h -r "%%i"

chcp 866

endlocal
exit /b 0
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:16, 19-12-2011 | #6


Пользователь


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

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


Цитата Iska:
1. Вам действительно надо сие проделывать для содержимого одной папки, без вложенных? Или потом обработка вложенных папок понадобится? »
Никоим образом не понадобится. Только для содержимого корневого каталога без рекурсивности.

Цитата Iska:
2. Использование какого-либо стороннего средства допустимо по условиям задачи? »
Не допустимо. Только встроенные средства Винды и желательно универсальные для разных версий ОС.
(все остальные варианты чисто ради образовательных для меня целей - мне было бы очень интересно. Благодарю).

Код - ок, попробую, разберу, отпишусь.

-------
Alex Dragokas


Последний раз редактировалось Dragokas, 19-12-2011 в 20:43.


Отправлено: 20:34, 19-12-2011 | #7


Пользователь


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

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


Оригинально - нужно было всего лишь сменить раскладку "chcp". Все сработало идеально. Вопрос закрыт.
Только убрал лишний код:
Код: Выделить весь код
setlocal enableextensions enabledelayedexpansion
endlocal

-------
Alex Dragokas


Последний раз редактировалось Dragokas, 19-12-2011 в 21:25.


Отправлено: 21:02, 19-12-2011 | #8


Ветеран


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

Профиль | Отправить 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



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Flash - [решено] PQI 8GB - не дает "закинуть файлы", "форматнутся", как реанимировать? HarrysFerrarievich Накопители (SSD, HDD, USB Flash) 0 18-11-2011 10:43
Разное - Как удалить скрытые компоненты в Мастере "Установки и удаления программ" GenAleks Microsoft Windows 2000/XP 9 09-10-2011 19:54
Разное - В меню "сервис" "свойства папки" не могу настроить скрытые файлы Antoni106 Microsoft Windows 2000/XP 1 15-12-2009 21:32
Интерфейс - Как убрать сообщения"папка содержит скрытые файлы" lolik119 Microsoft Windows 2000/XP 4 15-04-2009 06:03
Интерфейс - Не включается "Показывать скрытые файлы и папки" greenamateur Microsoft Windows 2000/XP 1 12-08-2007 11:37




 
Переход