Страница 1 из 2
Создание пустого файла
Добавлено: Вс июл 09, 2006 04:30
sEXEcutor
Уже были вариации на эту тему, предлагаю свой вариант.
Код: Выделить всё
'============================================================================================
' Создание пустого файла
' В параметрах укажите параметры
' "%P" {расширение} {редактор (в кавычках)}
' Если не указано расширение, файлу будет присвоено расширение .txt.
' Если вы пишете имя создаваемого файла вместе в расширением, второй параметр игнорируется.
' Редактор можно указывать, только если указано расширение.
' Созданный файл сразу открывается в редакторе, указанном в переменной Editor.
'============================================================================================
Dim FSO, WS
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WS = WScript.CreateObject("WScript.Shell")
if WScript.Arguments.Count = 2 then
Ext = "." & WScript.Arguments(1)
else
Ext = ".txt"
end if
if WScript.Arguments.Count = 3 then
Editor = WScript.Arguments(2)
else
Editor = "C:\Windows\Notepad.exe"
end if
FileName = InputBox("Введите имя создаваемого файла" & Ext & ":", "Создание файла", "")
if Len(FileName) = 0 then
MB = MsgBox("Не задано имя файла!", vbOKOnly + vbExclamation, "Создание файла")
WScript.Quit
end if
if Len(FSO.GetExtensionName(FileName)) > 0 then
Ext = ""
end if
FilePath = WScript.Arguments(0) & FileName & Ext
if not FSO.FileExists(FilePath) then
FSO.CreateTextFile(FilePath)
end if
'WS.Run FilePath
WS.Run """" & Editor & """ " & FilePath
Set FSO = Nothing
Set WS = Nothing
WScript.Quit
Я вообще-то PHP-программер, а это методом тыка написал

Ниче такой язык, понятный.
Добавлено: Вс июл 09, 2006 13:58
funduk
Этааа.... а shift+F4 чем плох?
Добавлено: Вс июл 09, 2006 14:20
sEXEcutor
funduk писал(а):Этааа.... а shift+F4 чем плох?
После сотни созданий файла мне просто надоело дописывать точку и расширение к названию файла, вот и решил обойтись без этого.
Плюс можно указывать редактор для открытия (например, указать расширение jpg и редактор Photoshop).
Re: Создание пустого файла
Добавлено: Пн июл 10, 2006 01:47
Volniy
sEXEcutor писал(а):Я вообще-то PHP-программер, а это методом тыка написал

Ниче такой язык, понятный.
Понятный, это факт, но все равно лучше
Set WC = Nothing заменить на
Set WS = Nothing. Если вначале скрипта писать
Option Explicit, такие ошибки будут отлавливаться.
Re: Создание пустого файла
Добавлено: Пн июл 10, 2006 01:55
Lamer
Volniy писал(а):лучше Set WC = Nothing заменить на Set WS = Nothing.
А раэница то в чём? Апичатка?

Добавлено: Пн июл 10, 2006 08:13
LocKtaR-o-DarK
2Lamer у Volniy хорошо намётан глаз, скрипт написан немного невнимательно, ошибка в предпоследней строке
2sEXEcutor
wincmd.ini
[Configuration]
RenameSelOnlyName=1
позволит легко работать, как указал funduk, по S+F4 и перименованием с копированием по S+F5, ну а S+F6 для шлифовки
хотя о вкусах не спорят...
Добавлено: Пн июл 10, 2006 11:46
Batya
Гм...
Я так понимаю, что опечатка тянется
отсюда 
А еще определять расширение через точку в имени не очень красиво. Это я в старых скриптах так делал (как же давно я уже не писал переменной с именем DotInName

). Для определения расширения есть функция FSO.GetExtensionName.
Добавлено: Пн июл 10, 2006 19:52
sEXEcutor
LocKtaR-o-DarK писал(а):wincmd.ini
[Configuration]
RenameSelOnlyName=1
позволит легко работать, как указал funduk, по S+F4 и перименованием с копированием по S+F5, ну а S+F6 для шлифовки
хотя о вкусах не спорят...
Это ж сколько движений нужно сделать..
Скрипт переписал.
Добавлено: Вт сен 21, 2010 16:39
_Johm
Этот пост меня вдохновил, наконец то. Искал реализацию автосоздания txt'шника по имени, но как обычно свои мысли, свои задумки по функционалу. Может кому-нибудь пригодится.
Код: Выделить всё
Option Explicit
Dim Dict : Set Dict = CreateObject("Scripting.Dictionary") : Dict.CompareMode = vbTextCompare
Dim Editor, Ext, ShowMemo, DefaultNoname, WinAssociation, OpenNewFile, Divider, DontOpen
'============================================================================================
' Имя: Новый файл по SHIFT+F4
' Параметры: ""%P%N""
'
'Использование (ввод в InputBox):
'[имя файла][пробел][?сокращение редактора]
'
'РЕДАКТОРЫ:
'первый параметр - сокращение редактора
'второй параметр - путь к редактору[[пробел]/расширение]
' здесь расширение создаваемого файла
' т.е, если в InputBox ввести "filename ?сокращение редактора", то получим
' файл "filename.расширение
'
'Так же работет явное указание расширения (условие - неравенство имени
'файла/папки под курсором и введенного имени до ?, не зависит от регистра)
'
'Знак вопроса можно заменить на другой разделитель в конфигурации (параметр Divider)
'============================================================================================
'=========Конфигурация========
'РЕДАКТОРЫ
Dict.Add "default", ""
'--------
Dict.Add "np", "%SystemRoot%\Notepad.exe"
Dict.Add "em", "%COMMANDER_PATH%\PROGS\OFFICE\emed32 10.0.0\EmEditor.exe"
Dict.Add "++", "%COMMANDER_PATH%\PROGS\OFFICE\notepadpp\notepad+1+.exe"
Dict.Add "ps", "%ProgramFiles%\Adobe\Photoshop CS\Photoshop.exe /psd"
Dict.Add "aud", "%ProgramFiles%\Adobe\Adobe Audition 3.0\Audition.exe /wav"
'Dict.Add
'Dict.Add
'Редактор по умолчанию
Editor = "em"
'Расширение по умочланию
Ext = "txt"
'Показывать памятку
ShowMemo = False
'Имя файла при пустом вводе
DefaultNoname = "Untitled"
'использовать системные ассоциации (не учитывать расширения в Dict)
WinAssociation = False
'Открывать созданный файл
OpenNewFile = True
'Управляющий символ
Divider = "/"
DontOpen = "-" 'если ввести последним, то файл только создается
'================================
Dim FSO, WS, Memo, arg1, FilePath, FileName, Resp, STR
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WS = WScript.CreateObject("WScript.Shell")
Dim i, DictKeys : DictKeys = Dict.Keys
If Dict.Count < 2 Then
WinAssociation = True
Else
If Dict.Count = 2 Then
Dict.Item("default") = Trim(Split(Dict.Item(DictKeys(1)),"/")(0))
ElseIf Dict.Exists(Editor) Then
Dict.Item("default") = Trim(Split(Dict.Item(Editor),"/")(0))
End If
Editor = Dict.Item("default")
End If
If ShowMemo Then
AssembleMemo()
Else
If Dict.Count > 1 Then Memo = vbCrLf & "для справки введите " & Divider & "memo" & vbCrLf
End If
'определяем путь и имя без расширения от файла/папки под курсором
If WScript.Arguments.Count = 1 Then
arg1 = WScript.Arguments(0)
Else
MsgBox "Неверно количество аргументов", vbExclamation, "Создание файла"
Quit
End If
If Right(arg1,1) = "\" Then
FileName = ""
FilePath = arg1
Else
FileName = FSO.GetBaseName(arg1)
FilePath = FSO.GetParentFolderName(arg1)
If Not Right(FilePath, 1) = "\" Then FilePath = FilePath & "\"
End If
'ввод пользователя (если используется разделитель(напрмер ?) и указано несуществующее
'сокращение редактора то цикл
STR = FileName
Dim str1, str2, editor1, str3, str4
str3 = "системная ассоциация"
arg1 = True 'как флаг
Do Until UserInput(STR) : : Loop
If OpenNewFile Then
On Error Resume Next
If WinAssociation Then
WS.Run Chr(34) & Resp & Chr(34)
If err Then MsgBox "Нет программы" & vbCrLf & _
"ассоциированной с расширением:" & vbCrLf & _
str2, vbExclamation, "Cоздание файла"
ElseIf FSO.FileExists(WS.ExpandEnvironmentStrings(Editor)) Then
WS.Run Chr(34) & Editor & Chr(34) & " " & Chr(34) & Resp & Chr(34)
If err Then MsgBox "Неизвестная ошибка" , vbExclamation, "Cоздание файла"
Else
MsgBox "Не найден редактор:" & vbCrLf & _
Editor, _
vbExclamation, _
"Создание файла"
End If
On Error Goto 0
End If
Quit
Sub AssembleMemo
''собираем памятку-таблицу для InputBox (сокращение exe'шник редактора)
If Dict.Count > 1 Then
For i = 1 To Dict.Count -1
Memo = Memo & DictKeys(i) & Chr(9) & FSO.GetBaseName(Dict.Item(DictKeys(i))) & vbCrLf
Next
Memo = vbCrLf & "(filename.ext " & Divider & "alias)" & vbCrLf & Memo
End If
End Sub
Function UserInput(Byref def_)
UserInput = False
If Not WinAssociation AND Dict.Count > 1 Then str3 = FSO.GetBaseName(Dict.Item("default"))
Resp = InputBox( "Введите имя создаваемого файла ." & Ext & ":" & vbCrlf & _
"редактор: " & str3 & vbCrlf & _
Memo, _
"Создание файла", _
def_)
If IsEmpty(Resp) Then Quit
If LCase(Resp) = Divider & "memo" Then
Memo = ""
AssembleMemo()
WinAssociation = False
Exit Function
End If
If Right(Resp, 1) = DontOpen Then
OpenNewFile = False
Resp = Left(Resp,Len(Resp)-1)
End If
If InStr(Resp, Divider) Then
Dim resp1
str1 = Split(Resp, Divider, 2)
resp1 = Trim(str1(0))
If (Dict.Count > 1) Then
WinAssociation = False
editor1 = Trim(str1(1))
If Dict.Exists(editor1) Then
str2 = Dict.Item(editor1)
If InStr(str2, Divider) Then
str1 = Split(str2, "/", 2)
Editor = Trim(str1(0))
Ext = LCase(str1(1))
Else
Editor = str2
End If
arg1 = False
Else
STR = Resp
Exit Function
End If
Else
Exit Function
End If
Resp = resp1
End If
If Len(Resp) = 0 Then
'FilePath = WS.SpecialFolders("MyDocuments") & "\"
FileName = DefaultNoname
ElseIf Resp = FileName Then
'do nothing
Else
If Not LCase(Resp) = LCase(FileName) Then
str2 = FSO.GetExtensionName(Resp)
If Not Len(str2) = 0 Then
Ext = ""
If (Not WinAssociation) AND arg1 AND (Dict.Count > 1) Then
Dim i, DictKeys
DictKeys = Dict.Keys
For i = 1 To Dict.Count -1
editor1 = Dict.Item(DictKeys(i))
If InStr(editor1, Divider) Then
str1 = Split(editor1, "/", 2)
If LCase(str2) = Trim(LCase(str1(1))) Then
Editor = Trim(str1(0))
Exit For
End If
End If
Next
End If
End If
End If
FileName = Resp
End If
If Not Len(Ext) = 0 Then Ext = "." & Ext
str4 = Resp
Resp = FilePath & FileName & Ext
If Not FSO.FileExists(Resp) Then
On Error Resume Next
FSO.CreateTextFile(Resp)
If err Then
MsgBox "Ошибка создания файла", _
vbExclamation, _
"Cоздание файла"
UserInput = False
STR = str4
Exit Function
End If
On Error Goto 0
End If
UserInput = True
End Function
Sub Quit
Set FSO = Nothing
Set WS = Nothing
Set Dict = Nothing
WScript.Quit
End Sub
Только не пойму, диалог нового файла в Photoshop CS всплывает, но при нажатии на Ok выдает Could not complete your request because of a program error.
Audition новый файл создает нормально.
Добавлено: Вт сен 21, 2010 17:16
Batya
_Johm писал(а):Только не пойму, диалог нового файла в Photoshop CS всплывает, но при нажатии на Ok выдает Could not complete your request because of a program error.
Может Photoshop CS ругается на пустой файл, созданный по CreateTextFile? Если просто открыть этот файл из программы, не ругается?
Или может быть синтаксис командной строки для открытия существующего файла требует какого-нибудь ключа?
Добавлено: Вт сен 21, 2010 17:17
Вахмурка
funduk писал(а):Этааа.... а shift+F4 чем плох?
sEXEcutor писал(а):После сотни созданий файла мне просто надоело дописывать точку и расширение к названию файла, вот и решил обойтись без этого.
Плюс можно указывать редактор для открытия (например, указать расширение jpg и редактор Photoshop).
А можно я пять копеек суну в дискуссию?
При нажатии shift+F4 предлагается по умолчанию имя текущего файла (включая расширение). Таким образом, чем "похожее" новое имя на текущее, тем меньше работы - можно свести дело к исправлению (добавлению, кому как удобнее) одного-единственного символа.
Теперь о редакторе. Простите, а ассоциации (внутренние или внешние) - это разве что-то другое?
Добавлено: Вт сен 21, 2010 18:43
_Johm
Batya
Да забыл сказать, 0 байтный файл потом Photoshop открывает без проблем, то есть, предлагает диалог нового файла и по Ok, всё ок.
+Точно, все дело в открытии текстового файла.
Поправил скрипт, использовал ADODB.Stream
Вахмурка
А ассоциации наверно то же самое, я ими не пользуюсь, с ними новый файл создается?
+тут ни одного символа менять не надо, чтобы получить txt-файл.
Поправил скрип, команда ?memo показывает памятку, по умолчанию её убрал.
Ну вроде всё. Не знаю, окупятся ли 1,5 часа написания сего скрипта, экономией времени на смену расширения на txt (за жизнь)...
Добавлено: Вт сен 21, 2010 18:45
Samwatas
Вахмурка писал(а):Простите, а ассоциации (внутренние или внешние) - это разве что-то другое?
Пост писался в 2006 году, тогда внутренних ассоциаций в тотале ещё не было.
Добавлено: Вт сен 21, 2010 20:01
Вахмурка
2_Johm
Нет, дело в другом. Если у меня расширение jpg ассоциировано с PhotoShоp'ом, то после создания jpg-файла он будет ассоциирован точно так же, и для этого незачем ваять отдельный скрипт.
2Samwatas
А внешние (системные)?
Добавлено: Вт сен 21, 2010 20:46
_Johm
Вахмурка
Да согласен. Добавлю флаг - не открывать файл автоматически, а только его создавать :)
+
Исправил скрипт. Все работает и с CreateTextFile. Ошибка была в двойном слэше, на который ругался Photoshop (но которые понимали EmEditor и notepad(++)): Метод GetParentFolderName возвращает папку без слэша на конце, но только не в случае когда находимся в корневом каталоге (тогда он возвращает D:\
Добавил определение РЕДАКТОРА по вводимому расширению и
параметр в конфиге для системных ассоциаций.