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

Добавлено: Ср дек 24, 2014 20:42
Flasher
KatMuse
Я исхожу из поставленной задачи:
KatMuse писал(а):Создать текстовый файл на основании двух переданных параметров - путь и имя файла.
То есть mybat.bat "C:\temp" "test.jpg" и получаем файл с именем "! test.txt" в каталоге temp.
Разве она не соответствует той, что по ссылке? Там помимо notepad ещё несколько вариантов.

Добавлено: Ср дек 24, 2014 20:50
KatMuse
Вот частичное решение, а как добавить информацию о файле я не понимаю...
Set folder="%~1\! %~n2.txt"
Set FName="" "%~1\! %~n2.txt"

@type nul>%folder%& start %FName%
Добавлено спустя 2 минуты:

Flasher
прошу прощения, это моя не доработка... Я имел ввиду другой контекст, с учётом первой задачи. Безусловно речь шла о заместителе для конкретного файла. Извините.

Добавлено: Ср дек 24, 2014 20:58
Flasher
Ясно. А описание к файлу должно быть в каком-то в определённом формате? А то можно было бы вытащить чуть больше.

Добавлено: Ср дек 24, 2014 21:54
KatMuse
Flasher
Спасибо за ответ! Мне лишь бы информативно, а формат описания не играет большой роли, другое дело, что я могу не понять некоторые элементы, так как опыт не большой, но если ещё прокомментируете, то было просто замечательно. Учиться я люблю :)
Я собственно в описание ввожу ключевые слова, чтобы потом можно было искать нужные файлы (не хочу зависеть от каталогизаторов), но очень бы хотелось добавить туда ещё и полезную информацию. А ещё лучше информация плюс хэш, но это уже понеслись мои мечты :)

Добавлено спустя 27 минут:

Частичное решение не работает для всех файлов, а только для тех, у имени которых нет пробела.

Добавлено: Ср дек 24, 2014 22:05
Flasher
KatMuse писал(а):плюс хэш
Ммм. С этим не сразу (хотя смотря какой вариант реализации выбрать).

Добавлено: Ср дек 24, 2014 22:37
KatMuse
Flasher, спасибо за ответ!
С этим не сразу (хотя смотря какой вариант реализации выбрать)
Ого! То есть это реально? Ничего себе, а я думал, что это нереально. Просто я очень хэши люблю, так как они сразу показывают, что было с файлом и это он повреждён или в системе проблема.

Добавлено: Ср дек 24, 2014 23:03
Flasher
KatMuse
Но всё же хэши желательно чем-то (например, инструментом ТС) проверять на автомате, а тут получается просто чтение информации. Разве это удобно?

Прежде покажу vbs-вариант без хэша (а после выяснения надобности выберем вариант):

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

'=========================================================
' Создать текстовые инфо-файлы к выбранным

' Параметры: %WL "<папка сохранения>" <открывать файлы: 1>
' Пример:    %WL "%T" 1
'=========================================================
With WScript.Arguments
  C = .Count : If C = 0 Then WScript.Quit
  Set FSO  = CreateObject("Scripting.FileSystemObject")
  Set SHA  = CreateObject("Shell.Application")
  Set List = FSO.OpenTextFile(.Item(0),,,-1)
  Path = FSO.BuildPath(.Item(1), "\") : If C = 3 Then Open = .Item(2)
End With
Do Until List.AtEndOfStream
  F = List.ReadLine
  If F <> "" And FSO.FileExists(F) And LCase(FSO.GetExtensionName(F)) <> "txt" Then
    With FSO.GetFile(F)
      Set Folder = SHA.NameSpace(.ParentFolder.Path)
      All = ""  : Set File = Folder.ParseName(.Name)
    End With
    For i = 0 to 288
      Value = Folder.GetDetailsOf(File, i) : If Value <> "" Then _
      All = All & vbNewLine & Folder.GetDetailsOf(0, i) & ":  " & Value
    Next : NF = Path & FSO.GetBaseName(F) & ".txt" : If Not FSO.FileExists(NF) Then _
    FSO.OpenTextFile(NF, 2, True, -1).Write Mid(All, 3) : If Open = 1 Then SHA.Open(NF)
  End If
Loop

Добавлено: Ср дек 24, 2014 23:20
KatMuse
:shock: :shock: :shock: :shock: :shock:
Это изумительно, великолепно, просто невероятно!!!
Это даже больше того о чём я мечтал!!!
Спасибо!!!
Вы правы это не удобно... я всех хешей не помню ведь :)
Flasher, ещё раз спасибо!

Добавлено: Ср дек 24, 2014 23:25
Flasher
Вот это реакция! :D Пожалуйста!
Я там ещё проверку добавлял на существование инфо-файла, чтобы не спотыкалось на ошибке, если что.

Добавлено: Ср дек 24, 2014 23:55
KatMuse
Спасибо Вам огромное, Flasher!

Добавлено: Пт дек 26, 2014 16:57
Flasher
KatMuse
Я тут подумал, надо бы от лишнего мусора (дублирование и отрицания) избавиться и выровнять
значения в колонке для моноширинного шрифта (Courier New, Lucida Console и т. п.) в текстовом редакторе:
[cut="CreateInfoTxtForSelectedFiles.vbs"]

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

'••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
' Создать текстовые инфо-файлы к выбранным

' Параметры: %WL "<папка сохранения>" <открывать файлы: 1>
' Пример:    %WL "%T" 1

' Автор - Flasher ©
'••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
With WScript.Arguments
  C = .Count : If C = 0 Then WScript.Quit
  Set FSO  = CreateObject("Scripting.FileSystemObject")
  Set List = FSO.OpenTextFile(.Item(0),,,-1)
  Path = FSO.BuildPath(.Item(1), "\") : If C = 3 Then Open = .Item(2)
End With : Set ShA = CreateObject("Shell.Application")
Set Dict = CreateObject("Scripting.Dictionary")
Do Until List.AtEndOfStream
  F = List.ReadLine
  If F <> "" And FSO.FileExists(F) And LCase(FSO.GetExtensionName(F)) <> "txt" Then
    With FSO.GetFile(F)
      Set Folder = ShA.NameSpace(.ParentFolder.Path)
      All = ""  : Set File = Folder.ParseName(.Name)
    End With : Dict.RemoveAll : Max = 0
    For i = 0 to 288
      If i <> 155 And i <> 176 And i <> 178 And i <> 180 And i <> 182 Then
        Value = Folder.GetDetailsOf(File, i)
        If Value <> "" And InStr(LCase(Value), " нет") = 0 And InStr(Value, "Нет") = 0 And _
        InStr(LCase(Value), "отсутствует") = 0 And InStr(LCase(Value), "без ") = 0 Then
          Name = Folder.GetDetailsOf(0, i) : Ln = Len(Name) : If Ln > Max Then Max = Ln
          Dict.Add Name, Value
        End If
      End If
    Next
    For Each Key in Dict.Keys
      All = All & vbNewLine & Key & ":  " & String(Max - Len(Key), " ") & Dict.Item(Key)
    Next : NF = Path & FSO.GetBaseName(F) & ".txt" : If Not FSO.FileExists(NF) Then _
    FSO.OpenTextFile(NF, 2, True, -1).Write Mid(All, 3) : If Open = 1 Then ShA.Open(NF)
  End If
Loop
[/cut]

Добавлено: Пт янв 02, 2015 01:27
KatMuse
Flasher,
Спасибо! Доработка восхитительна... Вся необходимая информация представлена наглядно и удобно. Очень легко искать нужный файл.
Реализация задачи превосходит все ожидания в сотню раз! Невероятно!

Добавлено: Пн янв 26, 2015 11:57
KatMuse
Можно ли попросить добавить пакетный режим, то есть, например, при выделении нужных файлов, в режиме без подкаталогов, заместители создавались бы автоматически и не открывались.

Добавлено: Пн янв 26, 2015 12:15
Flasher
KatMuse

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

  Path = FSO.BuildPath(.Item(1), "\") : If C = 3 Then Open = .Item(2) 
заменить на

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

  If C = 2 Then Open = .Item(1)
и в 4-й строке снизу Path заменить на FSO.GetParentFolderName(F) & "\"
2-й и 3-й параметры убрать.

Добавлено: Пн янв 26, 2015 16:28
KatMuse
Юху!!! :D Всё чудесно работает!!!
Файлики создаются - я радуюсь :) Спасибо!!!