Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Создание пустого файла
Goto page 1, 2  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
sEXEcutor



Joined: 09 Jul 2006
Posts: 24

Post (Separately) Posted: Sun Jul 09, 2006 04:30    Post subject: Создание пустого файла Reply with quote

Уже были вариации на эту тему, предлагаю свой вариант.

Code:
'============================================================================================
' Создание пустого файла
' В параметрах укажите параметры
' "%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-программер, а это методом тыка написал Smile
Ниче такой язык, понятный.


Last edited by sEXEcutor on Mon Jul 10, 2006 19:56; edited 5 times in total
Back to top
View user's profile Send private message
funduk



Joined: 16 Aug 2005
Posts: 1513
Location: Санкт-Петербург

Post (Separately) Posted: Sun Jul 09, 2006 13:58    Post subject: Reply with quote

Этааа.... а shift+F4 чем плох?
Back to top
View user's profile Send private message
sEXEcutor



Joined: 09 Jul 2006
Posts: 24

Post (Separately) Posted: Sun Jul 09, 2006 14:20    Post subject: Reply with quote

funduk wrote:
Этааа.... а shift+F4 чем плох?

После сотни созданий файла мне просто надоело дописывать точку и расширение к названию файла, вот и решил обойтись без этого.
Плюс можно указывать редактор для открытия (например, указать расширение jpg и редактор Photoshop).
Back to top
View user's profile Send private message
Volniy



Joined: 15 Dec 2004
Posts: 585
Location: Местный

Post (Separately) Posted: Mon Jul 10, 2006 01:47    Post subject: Re: Создание пустого файла Reply with quote

sEXEcutor wrote:
Я вообще-то PHP-программер, а это методом тыка написал Smile
Ниче такой язык, понятный.

Понятный, это факт, но все равно лучше Set WC = Nothing заменить на Set WS = Nothing. Если вначале скрипта писать Option Explicit, такие ошибки будут отлавливаться.
Back to top
View user's profile Send private message
Lamer



Joined: 20 Mar 2006
Posts: 522

Post (Separately) Posted: Mon Jul 10, 2006 01:55    Post subject: Re: Создание пустого файла Reply with quote

Volniy wrote:
лучше Set WC = Nothing заменить на Set WS = Nothing.

А раэница то в чём? Апичатка? Smile
Back to top
View user's profile Send private message
LocKtaR-o-DarK



Joined: 12 Aug 2005
Posts: 349
Location: Москва

Post (Separately) Posted: Mon Jul 10, 2006 08:13    Post subject: Reply with quote

2Lamer у Volniy хорошо намётан глаз, скрипт написан немного невнимательно, ошибка в предпоследней строке
2sEXEcutor
wincmd.ini
[Configuration]
RenameSelOnlyName=1
позволит легко работать, как указал funduk, по S+F4 и перименованием с копированием по S+F5, ну а S+F6 для шлифовки
хотя о вкусах не спорят...
_________________
        
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2224
Location: Москва, Россия

Post (Separately) Posted: Mon Jul 10, 2006 11:46    Post subject: Reply with quote

Гм...
Я так понимаю, что опечатка тянется отсюда Smile
А еще определять расширение через точку в имени не очень красиво. Это я в старых скриптах так делал (как же давно я уже не писал переменной с именем DotInName Rolling Eyes ). Для определения расширения есть функция FSO.GetExtensionName.
Back to top
View user's profile Send private message
sEXEcutor



Joined: 09 Jul 2006
Posts: 24

Post (Separately) Posted: Mon Jul 10, 2006 19:52    Post subject: Reply with quote

LocKtaR-o-DarK wrote:
wincmd.ini
[Configuration]
RenameSelOnlyName=1
позволит легко работать, как указал funduk, по S+F4 и перименованием с копированием по S+F5, ну а S+F6 для шлифовки
хотя о вкусах не спорят...

Это ж сколько движений нужно сделать.. Smile

Скрипт переписал.
Back to top
View user's profile Send private message
_Johm



Joined: 14 May 2006
Posts: 119

Post (Separately) Posted: Tue Sep 21, 2010 16:39    Post subject: Reply with quote

Этот пост меня вдохновил, наконец то. Искал реализацию автосоздания txt'шника по имени, но как обычно свои мысли, свои задумки по функционалу. Может кому-нибудь пригодится.

Code:

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 новый файл создает нормально.


Last edited by _Johm on Wed Sep 22, 2010 21:01; edited 14 times in total
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2224
Location: Москва, Россия

Post (Separately) Posted: Tue Sep 21, 2010 17:16    Post subject: Reply with quote

_Johm wrote:
Только не пойму, диалог нового файла в Photoshop CS всплывает, но при нажатии на Ok выдает Could not complete your request because of a program error.

Может Photoshop CS ругается на пустой файл, созданный по CreateTextFile? Если просто открыть этот файл из программы, не ругается?
Или может быть синтаксис командной строки для открытия существующего файла требует какого-нибудь ключа?
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Вахмурка



Joined: 27 Dec 2004
Posts: 2586
Location: Большая деревня Москва

Post (Separately) Posted: Tue Sep 21, 2010 17:17    Post subject: Reply with quote

funduk wrote:
Этааа.... а shift+F4 чем плох?
sEXEcutor wrote:
После сотни созданий файла мне просто надоело дописывать точку и расширение к названию файла, вот и решил обойтись без этого.
Плюс можно указывать редактор для открытия (например, указать расширение jpg и редактор Photoshop).
А можно я пять копеек суну в дискуссию?
При нажатии shift+F4 предлагается по умолчанию имя текущего файла (включая расширение). Таким образом, чем "похожее" новое имя на текущее, тем меньше работы - можно свести дело к исправлению (добавлению, кому как удобнее) одного-единственного символа.
Теперь о редакторе. Простите, а ассоциации (внутренние или внешние) - это разве что-то другое?
_________________
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Back to top
View user's profile Send private message
_Johm



Joined: 14 May 2006
Posts: 119

Post (Separately) Posted: Tue Sep 21, 2010 18:43    Post subject: Reply with quote

Batya
Да забыл сказать, 0 байтный файл потом Photoshop открывает без проблем, то есть, предлагает диалог нового файла и по Ok, всё ок.

+Точно, все дело в открытии текстового файла.
Поправил скрипт, использовал ADODB.Stream

Вахмурка
А ассоциации наверно то же самое, я ими не пользуюсь, с ними новый файл создается?

+тут ни одного символа менять не надо, чтобы получить txt-файл.

Поправил скрип, команда ?memo показывает памятку, по умолчанию её убрал.
Ну вроде всё. Не знаю, окупятся ли 1,5 часа написания сего скрипта, экономией времени на смену расширения на txt (за жизнь)...


Last edited by _Johm on Tue Sep 21, 2010 19:33; edited 2 times in total
Back to top
View user's profile Send private message
Samwatas



Joined: 12 Sep 2009
Posts: 95

Post (Separately) Posted: Tue Sep 21, 2010 18:45    Post subject: Reply with quote

Вахмурка wrote:
Простите, а ассоциации (внутренние или внешние) - это разве что-то другое?

Пост писался в 2006 году, тогда внутренних ассоциаций в тотале ещё не было.
Back to top
View user's profile Send private message
Вахмурка



Joined: 27 Dec 2004
Posts: 2586
Location: Большая деревня Москва

Post (Separately) Posted: Tue Sep 21, 2010 20:01    Post subject: Reply with quote

2_Johm
Нет, дело в другом. Если у меня расширение jpg ассоциировано с PhotoShоp'ом, то после создания jpg-файла он будет ассоциирован точно так же, и для этого незачем ваять отдельный скрипт.

2Samwatas
А внешние (системные)?
_________________
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Back to top
View user's profile Send private message
_Johm



Joined: 14 May 2006
Posts: 119

Post (Separately) Posted: Tue Sep 21, 2010 20:46    Post subject: Reply with quote

Вахмурка
Да согласен. Добавлю флаг - не открывать файл автоматически, а только его создавать :)

+
Исправил скрипт. Все работает и с CreateTextFile. Ошибка была в двойном слэше, на который ругался Photoshop (но которые понимали EmEditor и notepad(++)): Метод GetParentFolderName возвращает папку без слэша на конце, но только не в случае когда находимся в корневом каталоге (тогда он возвращает D:\

Добавил определение РЕДАКТОРА по вводимому расширению и
параметр в конфиге для системных ассоциаций.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group