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

Аватара пользователя
Sta1917

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

Сообщение Sta1917 »

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

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

Сообщение OSArev »

Ты этого хочеш?

Код:

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

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\""
Аватара пользователя
Sta1917

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

Сообщение Sta1917 »

Не совсем. Можно чтобы файл создавался с определенным именем (Readme, например) И было только второе окно про перезапись,
Цитата OSArev:



N=WshShell.Popup("Хотите ли Вы перезаписать существующий файл?"& vbCrLf & vbCrLf & _

"ДА - перезапись существующего файла."& vbCrLf & _

"Нет - переименование старого и создание нового файлов."& vbCrLf & _

"Отмена - выход из программы.", 33,"Создание текстового документа.", 256 + 3 + 64)
VBS/WSH/JS - [решено] Контекстное меню -> Новый текстовый документ.




Чтобы переименовывался новый файл, а не старый, и при переименовании прибавлялась единица (как при обычном создании), а не четырех-значное число.
Аватара пользователя
Sta1917

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

Сообщение Sta1917 »

Цитата Sta1917:



Чтобы переименовывался новый файл, а не старый
VBS/WSH/JS - [решено] Контекстное меню -> Новый текстовый документ.






Код:

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

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

Как добавлять порядковый номер не знаю, самому интересно...
Аватара пользователя
OSArev

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

Сообщение OSArev »

Цитата OSArev:



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




Как обычно: начинать перебор с файла без номера, затем со второго до теоретически достижимого, наращивая номер. Как только файла с очередным номером в каталоге не окажется — значит мы нашли искомое свободное имя файла.
Аватара пользователя
Iska

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

Сообщение Iska »

Доброго времени...

Iska, нашёл скрипт SendMessage
VBS/WSH/JS - [решено] Чтение и запись в файл
, через текстовый документ. Убрав проверку даты получил:

Код:

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

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:



Как обычно: начинать перебор с файла без номера, затем со второго до теоретически достижимого
VBS/WSH/JS - [решено] Контекстное меню -> Новый текстовый документ.




Это для меня - лес дремучий, вчера голова кипела. Будь добр, как будет свободное время напиши, пожалуйста, пример.Спасибо...
Аватара пользователя
OSArev

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

Сообщение OSArev »

Цитата OSArev:



Это для меня - лес дремучий, вчера голова кипела. Будь добр, как будет свободное время напиши, пожалуйста, пример.Спасибо...
VBS/WSH/JS - [решено] Контекстное меню -> Новый текстовый документ.




Кусок макроса для 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

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

Сообщение Iska »

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

Спасибо еще раз!
Аватара пользователя
OSArev

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

Сообщение OSArev »

Цитата Sta1917:



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






Код:

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

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
Ответить

Вернуться в «Скриптовые языки администрирования Windows»