Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] как добавить описание к файлу из контекстного меню (http://forum.oszone.net/showthread.php?t=202378)

alpap 18-03-2011 18:13 1638145

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

Cortina 19-03-2011 01:17 1638384

Обязательно скрипт? А программа FileNote (FileNote - добавляет пункт к контекстному меню, который позволяет создать текстовый файл с тем же именем, что и тот, который у Вас выделен. После этого автоматически открывает этот файл в Notepad для редактирования.) не пойдёт?

OSArev 19-03-2011 01:39 1638390

alpap , почему бы тебе не воспользоватся рекомендацией Cortina ?
Надеюсь, что тебе просто интересно как это на VBS, поэтому держи...Подправишь сам.
У меня длинновато получилось ,но зато работает с именами, содержащими не одну точку,
а также для расширений не равных трём символам.

Если, кто знает, как добиться этого по другому, пожалуйста поделитесь.
Код:

'-------------------------------------------------------------------------
' Определение полного имени
 If WScript.Arguments.Count = 1 Then
  sFile  = WScript.Arguments.Item(0)
  Set fso = CreateObject("Scripting.FileSystemObject")
 End If
'------------------
' короткое имя
Filespec =sfile
Set fso = CreateObject( "Scripting.FileSystemObject" )
Set file = fso.GetFile(fileSpec)
'----------------------------------------------
' Извлекаем расширение, можно будет добавлять по желанию.
Dim i, k, m, sym, Ext
 For k = 0 To Len(SFile)
    sym = Mid(SFile,Len(SFile) - k,1)
      If sym = "." Then
            m = Len(SFile) - k + 1
            k = Len(SFile)
      end if
  Next
Ext = ""
  For i = m To Len(SFile)
              Ext = Ext & Mid(SFile,i,1)
  Next 
'------------------
' Отсекаем расширение
' Узнаём последнюю "."
S = file.ShortName
position = InStrRev(s,".")
' ----------------------
' Получить имя без расширения
str = file.ShortName
intCharacters = position 
strNew = Left(str, intCharacters)
'-------------------------------------
' Можно отсеч последнюю точку, может надо будет...
'str1 = strNew
'intLength = Len(str1)
'intCharacters = intLength - 1
'strNew1 = Left(str1, intCharacters)
'----------------------------------
' узнаём путь к папке
FullPath = fileSpec

Dummy = Split(FullPath, "\")
JustFile = Dummy(UBound(Dummy))

JustPath = Left(FullPath, Len(FullPath) - Len(JustFile))
'---------------------------------------------
' Создаём
fso.CreateTextFile(JustPath & strnew & "txt")


Iska 19-03-2011 04:34 1638405

Цитата:

' Отсекаем расширение

' Получить имя без расширения

OSArev, всегда хотел понять, почему люди, используя «Scripting.FileSystemObject», не используют его методы для выделения пути, имени и расширения файла?

OSArev 19-03-2011 09:53 1638463

Цитата:

Цитата Iska
OSArev, всегда хотел понять, почему люди, используя «Scripting.FileSystemObject »

Цитата:

Цитата OSArev
работает с именами, содержащими не одну точку,
а также для расширений не равных трём символам. »

Цитата:

Цитата OSArev
Если, кто знает, как добиться этого по другому, пожалуйста поделитесь »


OSArev 19-03-2011 10:52 1638499

Цитата:

Цитата Iska
почему люди, используя «Scripting.FileSystemObject», не используют его методы для выделения пути, имени и расширения файла? »

Iska!!! Кажется дошло, скажи ты это имел ввиду?
Код:

Set FSO = CreateObject("Scripting.FileSystemObject")
'--------------------------------------------------------------------
' Определение полного имени
 If WScript.Arguments.Count = 1 Then
  sFile  = WScript.Arguments.Item(0)
  Set fso = CreateObject("Scripting.FileSystemObject")
 End If
'----------------------------------------
'Короткое имя, без расширения
Name = FSO.GetBaseName(sFile)
'------------------------------------------------
'Путь для создания
PathName = FSO.GetParentFolderName(sFile)
'------------------------------------------------------------
'Создание
fso.CreateTextFile(PathName & "\" & Name & ".txt")

Спасибо за наводку!

Iska 19-03-2011 11:36 1638533

OSArev, угу.

И там же ещё:
читать дальше »
Код:

fso.CreateTextFile(objFSO.BuildPath(PathName, Name & ".txt")
— не надо помнить о наличии или отсутствии завершающего слэша в «PathName».

«fso.GetAbsolutePathName()» позволяет смело использовать в аргументах скрипта относительные пути, наподобие:
Код:

cscript.exe //nologo H:\sample\script.vbs ".\new\boot.ini" "..\..\0040\eject.txt"

OSArev 19-03-2011 12:40 1638585

Iska, спасибо! Ты подтолкнул меня в новую(нужную) сторону.

alpap 21-03-2011 13:43 1640100

OSArev, дело в том, что FileNote создает текстовик в стандартном блокноте, а у меня стоит AkelPad и хочется чтобы в нем, сохранять быстрее, в нем мышь по умолчанию становится на кнопку "ок", а в блокноте нет, да и не хочу вообще его видеть. После сохранения уже, правда, открывается в AkelPad. Не видит почему-то FileNote AkelPad, в DLL посмотрел - нет там возможности изменить путь - это и есть проблема моя, а еще хочется чтобы можно было добавить описание и папкам, если бы эта программа была exeшником я бы это сделал в конт. меню, а так, кроме DLLки нет ничего, я же к ней путь не укажу, толку с того, сам скрипт нужен.

Iska 21-03-2011 18:50 1640328

alpap, Вы не рассматривали вопрос о переходе к работе с каким-либо файловым менеджером, где, как правило, сие давно реализовано («Ctrl-Z» в Far Manager и в TotalCommander)?

OSArev 21-03-2011 22:33 1640513

alpap для папок почти тоже самое. Прописать надо, соответстственно, в контекстном меню для папок:
Код:

Set FSO = CreateObject("Scripting.FileSystemObject")
Set WshShell = WScript.CreateObject("WScript.Shell")
'----------------------------------------------------
 If WScript.Arguments.Count = 1 Then
  sFolder  = WScript.Arguments.Item(0)
  End If
  Set Folder = FSO.GetFolder(sFolder)
'-------------------------------------
'Путь для создания
PathName = FSO.GetParentFolderName(sFolder)
'----------------------
' Имя папки
Name=folder.ShortName
'-----------------------------------------------
'Создание
'Здесь я добавил проверку и открытие файла, (мне так удобнее).
'Если тебе проверки не нужны оставь только строку    fso.CreateTextFile(PathName & "\" & Name & ".txt")
 If FSO.FileExists(PathName & "\" & Name & ".txt") Then
    WScript.Echo "Документ  ''"& Name & ".txt" & "'' - уже существует."
 WshShell.Run("Explorer" &" " & PathName & "\" & Name & ".txt")
    WScript.Quit 0
  Else
    fso.CreateTextFile(PathName & "\" & Name & ".txt")
  End If
 WshShell.Run("Explorer" &" " & PathName & "\" & Name & ".txt")


alpap 22-03-2011 14:00 1640986

OSArev, Благодарствую.

HORiSi 04-07-2014 22:59 2372201

Не смог правильно написать скрипт и прописать в HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\shell\ (какой параметр создавать? как прописывать сам скрип? в значение по умолчанию или как....)
Поэтому (ну мало ли) здесь же на форуме , некто TWC нарыл в недрах Интернета аналог Filenote, работающий в Windows 7 64bit.
Как говориться "встречайте: FileNoter v091205. "

От себя. Поскольку FileNoter являет собой исполняемый файл, то архив надо распаковать там, где не сотрётся (например, c:\Windows\FiLENOTER. Иначе получите ошибку "Файл не найден") и запустить.

alpap 12-05-2015 19:45 2506513

Долго здесь не появлялся!
Хочу закрыть эту тему. Сделал три скрипта по поводу добавления описания как к любому файлу так и к папке, причем
к папке - один в саму папку с тем же именем другой так же но рядом.
1. к файлу
@echo off
cd /d "%~dp2"
@echo off > "%~n2.txt"
start "" "%~n2.txt"
exit

2. к папке в папку
@echo off
cd /d "%~dp2"
set slesh=%~dp2
If "%slesh:~-1%"=="\" set slesh=%slesh:~0,-1%
for /d %%a in ("%slesh%") do set imja=%%~na
@echo off > "%imja%.txt"
start "" "%imja%.txt"
exit

3. к папке рядом
@echo off
cd /d "%~dp2.."
set slesh=%~dp2
If "%slesh:~-1%"=="\" set slesh=%slesh:~0,-1%
for /d %%a in ("%slesh%") do set imja=%%~na
@echo off > "%imja%.txt"
start "" "%imja%.txt"
exit

Почему у меня %~dp[2], n[2]? Я использую стороннюю программу для контектного меню (у меня ОС Windows 7 x86 - админ)
В программе (моей) указывается путь к .bat и выбор показа меню для файла/папки - в обычном меню в реестре это надо разделить, есть такая информация в интернете и здесь и немало.
Сам батник где угодно лучше где-то на С:\ - у меня в программах, сейчас на рабочем столе - путь меняю и все.
Естественно будет работать в любой Windows это же просто батник.
Если будете через реестр ставить в родное конт. меню будет наверное цифра 1 в %~dp[2], n[2], подправьте кто в теме.
Все работает как часы с любыми именами пробелами путями - проверялось.

alpap 14-05-2015 18:44 2507320

Хочу добавить, если скачать стороннюю утилиту для работы с буфером, то можно еще упростить все, достаточно скопировать в буфер текст и нажатию кнопки в контекстном меню он автоматически будет вставлен в .txt и сохранен рядом с файлом папкой или в папке.
Утилита http://vb.mvps.org/tools/ConClip

1. к файлу из буфера
@echo off
cd /d "%~dp2"
@echo off > "%~n2.txt"
"C:\Program Files\Bat\GetClip.exe" > "%~n2.txt"
exit

2. к папке в папку из буфера
@echo off
cd /d "%~dp2"
set slesh=%~dp2
If "%slesh:~-1%"=="\" set slesh=%slesh:~0,-1%
for /d %%a in ("%slesh%") do set imja=%%~na
@echo off > "%imja%.txt"
"C:\Program Files\Bat\GetClip.exe" > "%imja%.txt"
exit

3. к папке рядом из буфера
@echo off
cd /d "%~dp2.."
set slesh=%~dp2
If "%slesh:~-1%"=="\" set slesh=%slesh:~0,-1%
for /d %%a in ("%slesh%") do set imja=%%~na
@echo off > "%imja%.txt"
"C:\Program Files\Bat\GetClip.exe" > "%imja%.txt"
exit

У меня эта утилита по адресу: "C:\Program Files\Bat\GetClip.exe", вы же можете положить куда угодно в пределах С:\

HORiSi 14-09-2021 08:39 2966589

Вложений: 2
Цитата:

Цитата OSArev
контекстном меню для папок »

Итак. Создаём ключ для добавления в контекстном меню папок опции "ДОБАВИТЬ ОПИСАНИЕ"
Код:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AllFilesystemObjects\shell\FileNoter\command]
@="wscript.exe c:\\Windows\\opisanie.vbs \"%1\""

В результате выполнения c:\Windows\opisanie.vbs если путь с пробелами и в кириллице, получим файл рядом с папкой что-то типа 02()10~1.txt

Вопрос. Как названию Файла присвоить имя как у папки до 1-й точки (если такая есть в названии)?

Ответ.
Чтобы получить полное имя папки используем в переменной NME=folder.Name

Итоговый скрип
opisanie.7z
Код:

' В реестре для папок прописать путь к скрипту:
' [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AllFilesystemObjects\shell\FileNoter\command]
' @="wscript.exe c:\\Windows\\opisanie.vbs \"%1\""
'
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WshShell = WScript.CreateObject("WScript.Shell")
'----------------------------------------------------
 If WScript.Arguments.Count = 1 Then
  sFolder  = WScript.Arguments.Item(0)
  End If
  Set Folder = FSO.GetFolder(sFolder)
'-------------------------------------
'Путь для создания
PathName = FSO.GetParentFolderName(sFolder)
'----------------------
' Полное имя папки
' если нужно короткое, то меняем на строку NME=folder.ShortName
NME=folder.Name
'-----------------------------------------------
'Создание
'Проверка с тем же именем, что и папка, и если он существует – открытие файла
'Если тебе проверки не нужны оставь только строку
' fso.CreateTextFile(PathName & "\" & NME & ".txt")
 If FSO.FileExists(PathName & "\" & NME & ".txt") Then
    WScript.Echo "Документ  ''"& NME & ".txt" & "'' - уже существует."
 WshShell.Run("Explorer" &" " & PathName & "\" & NME & ".txt")
    WScript.Quit 0
  Else
    fso.CreateTextFile(PathName & "\" & NME & ".txt")
  End If
 WshShell.Run("Explorer" &" " & PathName & "\" & NME & ".txt")


alpap 15-09-2021 01:27 2966662

Цитата:

Цитата HORiSi
Как названию Файла присвоить имя как у папки »

в bat это так:
Код:

@echo off
set "d=C:\Имя папки.с точкой"

call :# "%d%"
pause& exit

:# "%d%"
  for %%a in ("%~1.") do break>"%%~nxa.txt"
exit /b


HORiSi 12-06-2023 08:21 3010445

Вложений: 1
Цитата:

Цитата OSArev
для папок »

Цитата:

Цитата HORiSi
"ДОБАВИТЬ ОПИСАНИЕ" »

Итого.
Собрал reg и два vbs: один для добавления описания к папке, другой – для файлов
Для работы «описаний»:
1. положить файлы vbs в C:\Windows
2. запустить вРеестрОписание.reg
вРеестрОписаниеДляПапки+Файла.7z
opisanie.vbs
opisaniefaila.vbs
вРеестрОписание.reg


opisanie.vbs

' http://forum.oszone.net/post-1640513-11.html
' В реестре для папок прописать путь к скрипту:
' [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AllFilesystemObjects\shell\FileNoter\command]
' @="wscript.exe c:\\Windows\\opisanie.vbs \"%1\""
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WshShell = WScript.CreateObject("WScript.Shell")
'----------------------------------------------------
If WScript.Arguments.Count = 1 Then
sFolder = WScript.Arguments.Item(0)
End If
Set Folder = FSO.GetFolder(sFolder)
'-------------------------------------
'Путь для создания
PathName = FSO.GetParentFolderName(sFolder)
'----------------------
' Полное имя папки
' если нужно короткое, то меняем на строку
' NME=folder.ShortName
NME=folder.Name
'-----------------------------------------------
'Создание
'Проверка с тем же именем, что и папка, и если он существует – открытие файла
'Если тебе проверки не нужны оставь только строку
' fso.CreateTextFile(PathName & "\" & NME & ".txt")
If FSO.FileExists(PathName & "\" & NME & ".txt") Then
WScript.Echo "Документ ''"& NME & ".txt" & "'' - уже существует."
WshShell.Run("Explorer" &" " & PathName & "\" & NME & ".txt")
WScript.Quit 0
Else
fso.CreateTextFile(PathName & "\" & NME & ".txt")
' fso.CreateTextFile(objFSO.BuildPath(PathName, NME & ".txt"))
End If
WshShell.Run("Explorer" &" " & PathName & "\" & NME & ".txt")


opisaniefaila.vbs

' http://forum.oszone.net/post-1640513-11.html
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WshShell = WScript.CreateObject("WScript.Shell")
'--------------------------------------------------------------------
' Определение полного имени
If WScript.Arguments.Count = 1 Then
sFile = WScript.Arguments.Item(0)
Set fso = CreateObject("Scripting.FileSystemObject")
End If
'----------------------------------------
'Короткое имя, без расширения
NME= FSO.GetBaseName(sFile)
'------------------------------------------------
'Путь для создания
PathName = FSO.GetParentFolderName(sFile)
'------------------------------------------------------------
'Создание
'-----------------------------------------------
'Создание
'Проверка с тем же именем, что и папка, и если он существует – открытие файла
'Если тебе проверки не нужны оставь только строку
' fso.CreateTextFile(PathName & "\" & Name & ".txt")
If FSO.FileExists(PathName & "\" & NME & ".txt") Then
WScript.Echo "Документ ''"& NME & ".txt" & "'' - уже существует."
WshShell.Run("Explorer" &" " & PathName & "\" & NME & ".txt")
WScript.Quit 0
Else
fso.CreateTextFile(PathName & "\" & NME & ".txt")
' fso.CreateTextFile(objFSO.BuildPath(PathName, NME & ".txt"))
End If
WshShell.Run("Explorer" &" " & PathName & "\" & NME & ".txt")


вРеестрОписание.reg

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AllFilesystemObjects\shell\opisanie]
@="ДОБАВИТЬ ОПИСАНИЕ"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AllFilesystemObjects\shell\opisanie\command]
@="wscript.exe c:\\Windows\\opisanie.vbs \"%1\""

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\shell\opisaniefaila]
@="ОПИСАНИЕ ФАЙЛА"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\shell\opisaniefaila\command]
@="wscript.exe c:\\Windows\\opisaniefaila.vbs \"%1\""


Время: 21:46.

Время: 21:46.
© OSzone.net 2001-