Страница 2 из 2

Добавлено: Пн дек 27, 2010 21:43
Avada
Flasher
Тут дело не в наводке Гислеру. По-моему, реализовать такое через внутренние ассоциации в принципе невозможно.

Добавлено: Пн дек 27, 2010 22:04
Flasher
Avada писал(а):По-моему, реализовать такое через внутренние ассоциации в принципе невозможно.
Об этом судить должен автор, как мне кажется. :wink:

Добавлено: Пн дек 27, 2010 22:06
Tol!k
DeathStalker писал(а):этот вариант тоже имеет право на жизнь
Согласен.
Если папки/файлы редко меняются — пройтись скриптом, который рассуёт соответствующие desktop.ini и .ico

Добавлено: Пн дек 27, 2010 23:00
Avada
Flasher
Желающие могут попытаться зарепортить. С интересом понаблюдаю за результатом, но сам по-прежнему полагаю, что реализация запрошенной фичи невозможна (хотя открывать здесь развёрнутую дискуссию с приведением аргументов не буду).

Добавлено: Вт дек 28, 2010 10:04
Batya
Tol!k писал(а):Если папки/файлы редко меняются — пройтись скриптом, который рассуёт соответствующие desktop.ini и .ico
Можно с использованием Script Content Plugin создать шаблон раскраски (без раскраски как таковой) и менять иконки скриптом, запускаемым плагином.
Даже уже есть рыба. Только пока совершенно нет времени :(

Добавлено: Вт дек 28, 2010 18:07
Fulkabaster
DeathStalker писал(а):Те же действия можно сделать вручную разместив в необходимых папках файлы desktop.ini
Например код в файле desktop.ini папки dropbox:

Код: Выделить всё

[.ShellClassInfo]
IconFile=C:\Documents and Settings\martinenko\Application Data\Dropbox\bin\Dropbox.exe
IconIndex=-1001
InfoTip=A securely backed up place to put your important files.
Я этот метод обдумывал. Если правильно понимаю, он не должен тормозить систему так, как плагин FileMask.
Причем файл можно редактироваь не вручную, а менять иконку через свойства папки, этот файл автоматом подкорректируется. Но беда в том, что такой фокус не удается сделать массово над всеми выделенными папками. А по одной папке так менять, если их сотни - не дело.
Есть еще выход - с помощью TC скопировать нужным образом измененный файл Desktop.ini во все заданные папки, но я не разобрался как это сделать. Т.е. вопрос свелся к такому: как можно скопировать заданный в левой панели файл во все подкаталоги открытого в правой панели каталога?

Добавлено: Вт дек 28, 2010 18:42
Batya
Fulkabaster писал(а):Т.е. вопрос свелся к такому: как можно скопировать заданный в левой панели файл во все подкаталоги открытого в правой панели каталога?
Указанный ранее скрит нужно запустить с параметрами:

Код: Выделить всё

%L %T%M 0
Логика работы:
Во всех выделенных каталогах активной панели будет создан файл desktop.ini. При этом в качестве файла иконок будет использован текущий файл на пассивной панели.

Добавлено: Вт дек 28, 2010 18:50
Fulkabaster
Нет, а если вообще, имея ввиду более общую задачу? Наверняка TC позволяет своими средствами скопировать один и тот же файл сразу во множество каталогов?

Добавлено: Вт дек 28, 2010 19:09
Avada
Fulkabaster
Позволяет. Стандартный функционал, введённый в TC 7.50 и улучшенный в 7.55 и 7.56. Поиск по форуму по словам Копировать во все выделенные, рекомендую задать показ результатов как сообщений. Или сразу сюда.

Добавлено: Ср дек 29, 2010 23:56
Andrey_A
Идея показалась интересной, написал скрипт, возможно решит проблему

Код: Выделить всё

'====================================================================== 
' Присвоение значков выделенным Папкам по содержимому 
' Ассоциированные значкам папки и расширения считываются из файла
' Синаксис файла: 
' Путь\к\значку{библиотека,номер}=;Папка1;Папка2;расширение1;расширение2;...
' d:\Картинки\Иконки\Архив.ico=;Архивы;Архив;7z;7zip;rar;
' %SystemRoot%\system32\shell32.dll,-236=;Музыка;mp3;wal;
' %COMMANDER_PATH%\Wcmicons.icl,1854=;Текст;Документы;doc;docx;txt;
' %WINDIR%\Wcmicons.dll,1457=;TC Image;Total Commander;
'========================  Параметры ===================================
' В параметрах вызова из TC должно быть прописанo 2параметра:
' {Cписок файлов} {путь\к\файлу_ассоциаций}
'========================    Примеры    ===================================
' %L "%%COMMANDER_PATH%%\Scripts\AddIcons\IconsOnAssFolders.txt"
'
' Автор:       Аверин Андрей (30.12.2010)
' Версия:    1.0
'====================================================================== 
Option Explicit 
Dim FSO, WSH, List, ExtLine, Name, Ext, Files, i, k, FF, IC, NN
Set FSO  = CreateObject("Scripting.FileSystemObject") 

If WScript.Arguments.Count < 2 Then
 MsgBox "Не хватает параметров!" & vbNewLine &_
  "Должно быть минимум Два параметра!" & vbNewLine &_
  "%L ""Путь\к\IconsOnAssFolers.txt""" & vbNewLine &_
  "A у Вас прописан(о) " & WScript.Arguments.Count & " !!! " , vbOKOnly &_
   vbCritical, "Присвоение значков Папкам по содержимому"
   Wscript.Quit
End if

Set List =  FSO.OpenTextFile(GetPath(WScript.Arguments(0)), 1)
ExtLine = Split(FSO.OpenTextFile(GetPath(WScript.Arguments(1)), 1).ReadAll, vbNewLine) 

Do While Not List.AtEndOfStream
  FF = GetPath(List.ReadLine)
if Len(FSO.GetExtensionName(FF)) = 0 Then
  Name = FSO.GetBaseName(FF)
  Ext = Split(";" & Name & ";" & ExtStr(FF), ";")
  For i = 0 To Ubound(Ext)
    For k = 0 To Ubound(ExtLine)
      if InStr(1,UCase(Mid(ExtLine(k), Instr(ExtLine(k), "=") + 1, Len(ExtLine(k)))), ";" & UCase(Ext(i)) & ";") >  0 Then
        If Right(FF, 1) <> "\" Then FF = FF & "\"
         IC = GetPath(Mid(ExtLine(k), 1, Instr(ExtLine(k), "=") - 1))
         if Instr(IC, ",") > 0 Then
         IC = GetPath(Mid(ExtLine(k), 1, Instr(ExtLine(k), ",") - 1))
         NN = Mid(ExtLine(k), Instr(ExtLine(k), ",") + 1, Instr(ExtLine(k), "=") - Instr(ExtLine(k), ",") - 1)
        else 
         NN = "0"
        end if
	 Desktop FF,IC, NN
	 i = Ubound(Ext)
	 k = Ubound(ExtLine)	  
      end if
    Next
  Next
end if  
Loop

List.Close
Set List = Nothing
Set FSO = Nothing 
Wscript.Quit

Function GetPath(pPath) 
  GetPath = FSO.GetAbsolutePathName(CreateObject("WScript.Shell").ExpandEnvironmentStrings(pPath)) 
End Function 

Function ExtStr(FFolder)
Dim Folder
Set Folder = FSO.GetFolder(FFolder)
For Each Files In Folder.Files
  Ext   = FSO.GetExtensionName(Files)
  if Instr(UCase(ExtStr), UCase(Ext)) < 1 Then
   ExtStr = ExtStr & Ext & ";" 
  end if    
Next
End Function 

Function Desktop(TargetDir,IconFile, Number)
Dim oFile, oDir, Attr, Des
Des = "Desktop.ini"
If FSO.FileExists(TargetDir & Des) Then FSO.DeleteFile (TargetDir & Des)
'Создаём Desktop.ini 
If not FSO.FileExists(TargetDir & Des) Then 
  Set oFile  = FSO.CreateTextFile(TargetDir & Des)
  oFile.WriteLine "[.ShellClassInfo]" 
  oFile.WriteLine "IconFile=" & IconFile
  oFile.WriteLine "IconIndex=" & Number
  oFile.WriteLine "IconResource=" & IconFile & "," & Number
  oFile.Close 
  ' Установливаем для файла атрибутов "Скрытый", "Системный", "Архивный" 
  Attr = 38 
  Set oFile = FSO.GetFile(TargetDir & Des) 
  oFile.Attributes = oFile.Attributes or Attr 
End If 
' Установливаем  для папки атрибут "Только чтение" 
Attr = 1 
Set oDir  = FSO.GetFolder(TargetDir) 
oDir.Attributes = oDir.Attributes or Attr
End Function
Необходимо составить свой файл, где будут прописаны значки и ассоциированные им папки пример:

Код: Выделить всё

d:\Картинки\Иконки\Архив.ico=;Архивы;Архив;7z;7zip;rar;
%SystemRoot%\system32\shell32.dll,-236=;Музыка;mp3;wal;
%COMMANDER_PATH%\Wcmicons.icl,1854=;Текст;Документы;doc;docx;txt;
%WINDIR%\Wcmicons.dll,1457=;TC Image;Total Commander;
D:\Картинки\Иконки\Vista My\Текст 004.ico,0=;Книги;djv;djvu;fb2;pdf;
кнопка на панели тотала:

Код: Выделить всё

TOTALCMD#BAR#DATA
"%COMMANDER_PATH%\Scripts\AddIcons\IconsOnAssFolders.vbs"
%L "%%COMMANDER_PATH%%\Scripts\AddIcons\IconsOnAssFolders.txt"
C:\Windows\System32\WScript.exe
IconsOnAssFolers


-1
т.к. тестировал скрипт недолго, возможны недочёты, кто обнаружит сообщите

Добавлено: Чт дек 30, 2010 01:28
Tol!k

Код: Выделить всё

@echo off &chcp 1251 >nul
setlocal enableextensions

for /r %%d in (*.flac *.ape *.wv) do call :d "%%~dpd" 40
for /r %%d in (*.mp3 *.ogg *.wma *.aac *.m4a) do call :d "%%~dpd" 168
for /r %%d in (*.mid *.mod *.it) do call :d "%%~dpd" 116
for /r %%d in (*.djvu *.fb2 *.pdf) do call :d "%%~dpd" 114
for /r %%d in (*.jpg *.tif *.png) do call :d "%%~dpd" 117
goto :eof

:d
if exist "%~1Desktop.ini" goto :eof
echo [.ShellClassInfo]> "%~1Desktop.ini"
echo IconFile=%%SystemRoot%%\system32\shell32.dll>> "%~1Desktop.ini"
echo IconIndex=%2>> "%~1Desktop.ini"
attrib +h +s "%~1Desktop.ini"
attrib +r "%~1."
goto :eof
Простенько. Запустить в корневой папке.

Добавлено: Пт дек 31, 2010 09:31
Fulkabaster
Как запускать-то их? Мне больше как-то приходилось такие вещи в линухе делать %)

Добавлено: Пт дек 31, 2010 11:37
Tol!k
Как использовать Script-ы?
*Код, начинающийся с @echo off, сохранять с расширением .cmd
**Ещё встречаются скрипты AHK и AutoIt, но реже.

Добавлено: Пт дек 31, 2010 13:02
Fulkabaster
Спасибо.