Показать полную графическую версию : [решено] как добавить описание к файлу из контекстного меню
нужен скрипт, при выполнении которого по правой клавише мыши из контекстного меню создается текстовый файл в который можно вставить описание и сохраняется с именем выделенного файла
Обязательно скрипт? А программа FileNote (FileNote - добавляет пункт к контекстному меню, который позволяет создать текстовый файл с тем же именем, что и тот, который у Вас выделен. После этого автоматически открывает этот файл в Notepad для редактирования.) не пойдёт?
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")
' Отсекаем расширение
…
' Получить имя без расширения
…
OSArev, всегда хотел понять, почему люди, используя «Scripting.FileSystemObject», не используют его методы для выделения пути, имени и расширения файла?
OSArev, всегда хотел понять, почему люди, используя «Scripting.FileSystemObject »
работает с именами, содержащими не одну точку,
а также для расширений не равных трём символам. »
Если, кто знает, как добиться этого по другому, пожалуйста поделитесь »
почему люди, используя «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")
Спасибо за наводку!
OSArev, угу.
И там же ещё:
fso.CreateTextFile(objFSO.BuildPath(PathName, Name & ".txt")
— не надо помнить о наличии или отсутствии завершающего слэша в «PathName».
«fso.GetAbsolutePathName()» позволяет смело использовать в аргументах скрипта относительные пути, наподобие:
cscript.exe //nologo H:\sample\script.vbs ".\new\boot.ini" "..\..\0040\eject.txt"
Iska, спасибо! Ты подтолкнул меня в новую(нужную) сторону.
OSArev, дело в том, что FileNote создает текстовик в стандартном блокноте, а у меня стоит AkelPad и хочется чтобы в нем, сохранять быстрее, в нем мышь по умолчанию становится на кнопку "ок", а в блокноте нет, да и не хочу вообще его видеть. После сохранения уже, правда, открывается в AkelPad. Не видит почему-то FileNote AkelPad, в DLL посмотрел - нет там возможности изменить путь - это и есть проблема моя, а еще хочется чтобы можно было добавить описание и папкам, если бы эта программа была exeшником я бы это сделал в конт. меню, а так, кроме DLLки нет ничего, я же к ней путь не укажу, толку с того, сам скрипт нужен.
alpap, Вы не рассматривали вопрос о переходе к работе с каким-либо файловым менеджером, где, как правило, сие давно реализовано («Ctrl-Z» в Far Manager и в TotalCommander)?
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")
Не смог правильно написать скрипт и прописать в HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\shell\ (какой параметр создавать? как прописывать сам скрип? в значение по умолчанию или как....)
Поэтому (ну мало ли) здесь же на форуме (http://forum.oszone.net/post-2111704.html#post2111704), некто TWC нарыл в недрах Интернета аналог Filenote, работающий в Windows 7 64bit.
Как говориться "встречайте: FileNoter v091205 (http://nod5.dcmembers.com/downloads/filenoter.zip). "
От себя. Поскольку FileNoter являет собой исполняемый файл, то архив надо распаковать там, где не сотрётся (например, c:\Windows\FiLENOTER. Иначе получите ошибку "Файл не найден") и запустить.
Долго здесь не появлялся!
Хочу закрыть эту тему. Сделал три скрипта по поводу добавления описания как к любому файлу так и к папке, причем
к папке - один в саму папку с тем же именем другой так же но рядом.
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], подправьте кто в теме.
Все работает как часы с любыми именами пробелами путями - проверялось.
Хочу добавить, если скачать стороннюю утилиту для работы с буфером, то можно еще упростить все, достаточно скопировать в буфер текст и нажатию кнопки в контекстном меню он автоматически будет вставлен в .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", вы же можете положить куда угодно в пределах С:\
контекстном меню для папок »
Итак. Создаём ключ для добавления в контекстном меню папок опции "ДОБАВИТЬ ОПИСАНИЕ"
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-й точки (если такая есть в названии)?
Ответ.
Чтобы получить полное имя папки (http://vbhack.ru/uroki-vbscript/obekt-fso/urok-vbscript-n12-rabota-s-papkami-fso.html) используем в переменной NME=folder.Name
Итоговый скрип
' В реестре для папок прописать путь к скрипту:
' [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")
Как названию Файла присвоить имя как у папки »
в bat это так:
@echo off
set "d=C:\Имя папки.с точкой"
call :# "%d%"
pause& exit
:# "%d%"
for %%a in ("%~1.") do break>"%%~nxa.txt"
exit /b
для папок »
"ДОБАВИТЬ ОПИСАНИЕ" »
Итого.
Собрал reg и два vbs: один для добавления описания к папке, другой – для файлов
Для работы «описаний»:
1. положить файлы vbs в C:\Windows
2. запустить вРеестрОписание.reg
opisanie.vbs
opisaniefaila.vbs
вРеестрОписание.reg
' 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")
' 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")
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\""
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC