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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Контекстное меню -> Новый текстовый документ.

Ответить
Настройки темы
VBS/WSH/JS - [решено] Контекстное меню -> Новый текстовый документ.

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


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

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


Здравствуйте. Вот здесь набросок твика реестра для добавления пункта в контекстное меню "Новый txt" можно сделать его без окон командной строки, добавить открытие в блокноте (или асоциированном для txt приложении) и запрос на действие если файл с таким именем уже существует? Спасибо.

Отправлено: 00:44, 30-10-2011

 

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


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

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


Ты этого хочеш?
Код: Выделить весь код
Call CreateFile
Function CreateFile
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WshShell = CreateObject("WScript.Shell")
sFile  = inputbox("Введите название:","Создание текстового документа.",,000,000)
If Len(sFile) = 0 Then 
    sFile = WScript.Quit
End If 

Set objRegExp = new regexp
objRegExp.Pattern = "[\*\\\/\?\<\>\:\""\|]" 
If objRegExp.Test(sFile) Then 
    R = MsgBox("ОШИБКА!!! " & vbCrLf & _
           "Введены недопустимые символы в имени файла." & vbCrLf & _
           "Попробуйте снова", 64+5 , "Создание текстового документа.") 
Select Case R 
    Case vbRetry 
         Call CreateFile
     Case vbCancel 
          WScript.Quit
End Select 
Else
'Путь для создания
'Определяем,где находимся(только для контекстного меню)
If WScript.Arguments.Count = 1 Then
    PathName = WScript.Arguments.Item(0)
End if
'Создание
 If FSO.FileExists(PathName & "\" & sFile & ".txt") Then
B=WshShell.Popup("Документ  "&Chr(34)& PathName & "\" & sFile & ".txt"&Chr(34)&" - уже существует."& vbCrLf & _
                 "Выберие,рекомендуемое действие!"& vbCrLf & vbCrLf & _
                 "Отмена           - выход из программы."& vbCrLf & _
                 "Повторить     - вернуться к выбору имени."& vbCrLf & _
                 "Продолжить - продолжение программы.", 33,"Создание текстового документа.", 512 + 6 + 64)
Select Case B
    Case -1
        WshShell.Popup "Время ожидания истекло."& vbCrLf & _
               "Нажмите ОK для выхода из программы." ,,"Создание текстового документа.",64
    Case 2
        Wscript.Quit
    Case 10
         Call CreateFile
    Case 11
N=WshShell.Popup("Хотите ли Вы перезаписать существующий файл?"& vbCrLf & vbCrLf & _
                 "ДА         - перезапись существующего файла."& vbCrLf & _
                 "Нет        - переименование старого и создание нового файлов."& vbCrLf & _
                 "Отмена - выход из программы.", 33,"Создание текстового документа.", 256 + 3 + 64)
Select Case N
    Case -1
        WshShell.Popup "Время ожидания истекло."& vbCrLf & _
               "Нажмите ОK для выхода из программы." ,,"Создание текстового документа.",64
    Case 6
        FSO.DeleteFile PathName & "\" & sFile & ".txt"
        fso.CreateTextFile(PathName & "\" & sFile & ".txt")
        WshShell.Run("%windir%\notepad " & PathName & "\" & sFile & ".txt")
    Case 7
        Ren=Right("0" & Minute(Now), 2) & Right("0" & Second(Now), 2)
        InFile =PathName & "\" & sFile & ".txt"
        OutFile=PathName & "\" & sFile & "_" & Ren & ".txt"
        FSO.MoveFile InFile, OutFile
        fso.CreateTextFile(PathName & "\" & sFile & ".txt") 
       WshShell.Run("%windir%\notepad " & PathName & "\" & sFile & ".txt")
    Case 2
      Wscript.Quit
End Select
End Select
Else
      fso.CreateTextFile(PathName & "\" & sFile & ".txt") 
     WshShell.Run("%windir%\notepad " & PathName & "\" & sFile & ".txt")
End if
End if
End Function
Скрипт только для контекстного меню. Впридачу REG-файл:
Код: Выделить весь код
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\Background\shell\Создать документ TXT]
"icon"="shell32.dll,-152"

[HKEY_CLASSES_ROOT\Directory\Background\shell\Создать документ TXT\command]
@="WScript C:\\Windows\\ТВОЯ\\ПАПКА\\ИМЯ_ФАЙЛА.vbs \"%V\""

Последний раз редактировалось OSArev, 30-10-2011 в 10:34.


Отправлено: 02:50, 30-10-2011 | #2



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

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


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


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

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


Не совсем. Можно чтобы файл создавался с определенным именем (Readme, например) И было только второе окно про перезапись,
Цитата OSArev:
N=WshShell.Popup("Хотите ли Вы перезаписать существующий файл?"& vbCrLf & vbCrLf & _
"ДА - перезапись существующего файла."& vbCrLf & _
"Нет - переименование старого и создание нового файлов."& vbCrLf & _
"Отмена - выход из программы.", 33,"Создание текстового документа.", 256 + 3 + 64) »
Чтобы переименовывался новый файл, а не старый, и при переименовании прибавлялась единица (как при обычном создании), а не четырех-значное число.

Последний раз редактировалось Sta1917, 30-10-2011 в 14:14.


Отправлено: 13:42, 30-10-2011 | #3


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


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

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


Цитата Sta1917:
Чтобы переименовывался новый файл, а не старый »
Код: Выделить весь код
Call CreateFile

Function CreateFile
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WshShell = CreateObject("WScript.Shell")
 sFile  = "Readme"

If WScript.Arguments.Count = 1 Then
    PathName = WScript.Arguments.Item(0)
End if

If FSO.FileExists(PathName & "\" & sFile & ".txt") Then

N=WshShell.Popup("Документ  "&Chr(34)& PathName & "\" & sFile & ".txt"&Chr(34)&" - уже существует."& vbCrLf & _
                 "Хотите ли Вы перезаписать существующий файл?"& vbCrLf & vbCrLf & _
                 "ДА         - перезапись существующего файла."& vbCrLf & _
                 "Нет        - к имени нового файла будет добавлено числовле значение."& vbCrLf & _
                 "Отмена - выход из программы.", 33,"Создание текстового документа.", 256 + 3 + 64)
Select Case N
    Case -1
       WshShell.Popup "Время ожидания истекло."& vbCrLf & _
                                 "Нажмите ОK для выхода из программы." ,,"Создание текстового документа.",64
    Case 6
      FSO.DeleteFile PathName & "\" & sFile & ".txt"
      fso.CreateTextFile(PathName & "\" & sFile & ".txt")
      WshShell.Run("%windir%\notepad " & PathName & "\" & sFile & ".txt")
    Case 7
      Ren=Right("0" & Minute(Now), 2) & Right("0" & Second(Now), 2)
      fso.CreateTextFile(PathName & "\" & sFile & "_" & Ren & ".txt") 
      WshShell.Run("%windir%\notepad " & PathName & "\" & sFile & "_" & Ren & ".txt")
    Case 2
      Wscript.Quit
End Select
Else
      fso.CreateTextFile(PathName & "\" & sFile & ".txt") 
     WshShell.Run("%windir%\notepad " & PathName & "\" & sFile & ".txt")
End if
End Function
Как добавлять порядковый номер не знаю, самому интересно...
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:41, 31-10-2011 | #4


Ветеран


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

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


Цитата OSArev:
Как добавлять порядковый номер не знаю, самому интересно... »
Как обычно: начинать перебор с файла без номера, затем со второго до теоретически достижимого, наращивая номер. Как только файла с очередным номером в каталоге не окажется — значит мы нашли искомое свободное имя файла.
Это сообщение посчитали полезным следующие участники:

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


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


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

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


Доброго времени...
Iska, нашёл скрипт SendMessagehttp://forum.oszone.net/post-1718295-2.html, через текстовый документ. Убрав проверку даты получил:
Код: Выделить весь код
Call CreateFile

Function CreateFile
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WshShell = CreateObject("WScript.Shell")

 sFile  = "Readme"

If WScript.Arguments.Count = 1 Then
    PathName = WScript.Arguments.Item(0)
End if

If FSO.FileExists(PathName & "\" & sFile & ".txt") Then

N=WshShell.Popup("Документ  "&Chr(34)& PathName & "\" & sFile & ".txt"&Chr(34)&" - уже существует."& vbCrLf & _
                 "Хотите ли Вы перезаписать существующий файл?"& vbCrLf & vbCrLf & _
                 "ДА         - перезапись существующего файла."& vbCrLf & _
                 "Нет        - к имени нового файла будет добавлено числовле значение."& vbCrLf & _
                 "Отмена - выход из программы.", 33,"Создание текстового документа.", 256 + 3 + 64)
Select Case N
    Case -1
WshShell.Popup "Время ожидания истекло."& vbCrLf & _
               "Нажмите ОK для выхода из программы." ,,"Создание текстового документа.",64
    Case 6
      FSO.DeleteFile PathName & "\" & sFile & ".txt"
      fso.CreateTextFile(PathName & "\" & sFile & ".txt")
      WshShell.Run("%windir%\notepad " & PathName & "\" & sFile & ".txt")
    Case 7
      CheckFile = "d:\check.txt"
      Newfile = PathName & "\" & sFile & "_" & SetNumberFile(CheckFile) & ".txt"
      fso.CreateTextFile(Newfile)
      WshShell.Run("%windir%\notepad " & Newfile)
    Case 2
      Wscript.Quit
End Select
Else
      fso.CreateTextFile(PathName & "\" & sFile & ".txt") 
     WshShell.Run("%windir%\notepad " & PathName & "\" & sFile & ".txt")
End if
End Function

Function SetNumberFile(f)
  Dim arrCheck
  Dim CountArchk
  Dim objFSO
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    If objFSO.FileExists(f) Then
      arrCheck = Split(objFSO.OpenTextFile(f).ReadLine, "#", 2)
      CountArch = arrCheck(1) + 1
    End If
    If Not objFSO.FileExists(f) Then CountArch = 1
    objFSO.OpenTextFile(f, 2, True).Write "#" & CountArch
    SetNumberArchive = CountArch
End Function
Всё работает, но хотелось бы узнать, как это сделать без помощи текстовика.
Цитата Iska:
Как обычно: начинать перебор с файла без номера, затем со второго до теоретически достижимого »
Это для меня - лес дремучий, вчера голова кипела. Будь добр, как будет свободное время напиши, пожалуйста, пример.Спасибо...

Отправлено: 20:22, 31-10-2011 | #6


Ветеран


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

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


Цитата OSArev:
Это для меня - лес дремучий, вчера голова кипела. Будь добр, как будет свободное время напиши, пожалуйста, пример.Спасибо... »
Кусок макроса для Far Manager устроит?
читать дальше »
Код: Выделить весь код
%i = 1; 

$While (1) 
	%sFolderName = "000" + string(%i); 
	%sFolderName = substr(%sFolderName, len(%sFolderName) - 3, 3); 
	
	$If (!fexist(APanel.Path + "\\" + %sFolderName)) 
		F7 CtrlY
		print(%sFolderName) 
		CtrlK Enter 
		Enter
		
		$Exit 
	$End 
	
	%i = %i + 1; 
$End

Шучу.

Прототип кода может выглядеть примерно так:
Код: Выделить весь код
Option Explicit

Dim strPath
Dim i
Dim strName


strPath = "c:\Temp"

With WScript.CreateObject("Scripting.FileSystemObject")
	
	i = 0
	
	Do
		i = i + 1
		
		If i = 1 Then ' По аналогии с Windows
			strName = "Текстовый документ.txt"
		Else
			strName = "Текстовый документ" & " (" & CStr(i) & ").txt"
		End If
		
		If Not .FileExists(.BuildPath(strPath, strName)) Then
			WScript.Echo strName
			
			' Здесь создаём текстовый файл с именем «strName»
			
			Exit Do
		End If
	Loop
End With

WScript.Quit 0
Либо вовсе вынести определение имени в функцию:
Код: Выделить весь код
Option Explicit

WScript.Echo GetNextName("c:\Temp", "Текстовый документ.txt")

' Здесь создаём текстовый файл с возвращённым функцией именем

WScript.Quit 0

Function GetNextName(strPath, strTemplateName)
	Dim i
	Dim strName
	Dim strBaseName
	Dim strExtension
	
	With WScript.CreateObject("Scripting.FileSystemObject")
		If .FolderExists(strPath) Then
			strBaseName  = .GetBaseName(strTemplateName)
			strExtension = .GetExtensionName(strTemplateName)
			
			i = 0
			
			Do
				i = i + 1
				
				If i = 1 Then
					strName = .BuildPath(strPath, strBaseName & "." & strExtension)
				Else
					strName = .BuildPath(strPath, strBaseName & " (" & CStr(i) & ")." & strExtension)
				End If
				
				If Not .FileExists(strName) Then
					Exit Do
				End If
			Loop
		Else
			WScript.Echo "Folder [" & strPath & "] not found"
			
			Err.Raise 76
		End If
	End With
	
	GetNextName = strName
End Function

Последний раз редактировалось Iska, 01-11-2011 в 02:10. Причина: Добавлена функция

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

Отправлено: 01:56, 01-11-2011 | #7


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


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

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


Iska Спасибо огромное!!! Обалдеть!!! "А, ларчик просто открывался..." Я вчера в такие дебри залез, ух...
Спасибо еще раз!

Отправлено: 13:09, 01-11-2011 | #8


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


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

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


Цитата OSArev:
А, ларчик просто открывался... »
а, можно для чайников все в скирпт собрать?

Отправлено: 23:16, 08-11-2011 | #9


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


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

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


Цитата Sta1917:
все в скирпт собрать? »
Код: Выделить весь код
Option Explicit

Call CreateFile

WScript.Quit 0

Function CreateFile
Dim FSO, WshShell, sFile, PathName, i, strName, N

Set FSO = CreateObject("Scripting.FileSystemObject")
Set WshShell = CreateObject("WScript.Shell")

 sFile  = "Readme"

'Определяем,где находимся(только для контекстного меню)
 If WScript.Arguments.Count = 1 Then
    PathName = WScript.Arguments.Item(0)
 End if

'Создание
 If FSO.FileExists(PathName & "\" & sFile & ".txt") Then

N=WshShell.Popup("Документ  "&Chr(34)& PathName & "\" & sFile & ".txt"&Chr(34)&" - уже существует."& vbCrLf & _
                 "Хотите ли Вы перезаписать существующий файл?"& vbCrLf & vbCrLf & _
                 "ДА         - перезапись существующего файла."& vbCrLf & _
                 "Нет        - к имени нового файла будет добавлен последующий порядковый номер."& vbCrLf & _
                 "Отмена - выход из программы.", 33,"Создание текстового документа.", 256 + 3 + 64)
Select Case N
    Case -1
      WshShell.Popup "Время ожидания истекло."& vbCrLf & _
               "Нажмите ОK для выхода из программы." ,,"Создание текстового документа.",64
    Case 6
'Для кн."ДА"
      FSO.DeleteFile PathName & "\" & sFile & ".txt"
      fso.CreateTextFile(PathName & "\" & sFile & ".txt")
      WshShell.Run("%windir%\notepad " & PathName & "\" & sFile & ".txt")
    Case 7
'Для кн."НЕТ"
      With FSO
        i = 0
          Do
            i = i + 1  
               If i <> 0 Then strName = sFile & " _" & CStr(i) & ".txt"                
               If Not .FileExists(.BuildPath(PathName, strName)) Then 
                  fso.CreateTextFile(PathName & "\" &  strName)
                  Exit Do
               End If
          Loop
      End With
      WshShell.Run("%windir%\notepad " & PathName & "\" & strName)
    Case 2
      Wscript.Quit
End Select

Else
'Если ещё нет файла с ук.названием
     fso.CreateTextFile(PathName & "\" & sFile & ".txt") 
     WshShell.Run("%windir%\notepad " & PathName & "\" & sFile & ".txt")
End if
End Function
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:56, 09-11-2011 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Контекстное меню -> Новый текстовый документ.

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [решено] Возвращение в меню "Создать" пункта "Текстовый документ", ассоциирование с TXT Pavla Microsoft Windows 7 16 10-07-2012 07:47
Интерфейс - Из контекстного меню в пункте "Создать", пропала команда "Текстовый документ". QUMATOZ Microsoft Windows 2000/XP 1 23-10-2011 18:07
Разное - [решено] Как задать свое название вместо "Новый текстовый документ" при создании oldim Microsoft Windows 7 3 25-09-2011 14:07
Разное - [решено] Не могу создать новый текстовый документ Artesmann Microsoft Windows Vista 2 24-12-2008 19:24
Разное - в меню под правой кнопкой мыши исчезла опция создать текстовый документ fnm Microsoft Windows 2000/XP 1 07-10-2008 15:15




 
Переход