Страница 15 из 42

Добавлено: Пт май 14, 2010 14:38
Flasher
laburj писал(а):но в "Разном" поискать её догадался
С учётом "но", наверное, следовало написать "не догадался".) В "Разном" есть смысл искать только в случае непосредственного назначения командам комбинаций клавиш. А так этот диалог "Выбор команды" вызывается либо из меню - Инструменты>Список команд ТС, либо командой cm_CommandBrowser.

Добавлено: Пт май 14, 2010 14:50
laburj
Flasher
С учётом "но", наверное, следовало написать "не догадался".)
да-да, ты прав! отправил сообщение, не прочитав.
А так этот диалог "Выбор команды" вызывается либо из меню - Инструменты>Список команд ТС, либо командой cm_CommandBrowser
я так обычно и ищу

Добавлено: Чт май 27, 2010 16:28
Йяхе
Друзья, такая задача: по хоткею добавлять текущую дату_время в конец имени файла\каталога.
Вот так:
Имя_файла_DD-MM-YYYY`HH-MM-SS.расширение

Добавлено: Чт май 27, 2010 16:58
Batya
Йяхе писал(а):Друзья, такая задача: по хоткею добавлять текущую дату_время в конец имени файла\каталога.
Вот так:
Имя_файла_DD-MM-YYYY`HH-MM-SS.расширение
vbs:

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

'==========================================================
' Переименование файла\папки -
'   Добавление текущей даты_времи в конец имени: 
'   Имя_файла_DD-MM-YYYY`HH-MM-SS.расширение
'
' Параметры:
' {файл\папка}
'
' Пример параметров при вызове из TC: 
' %P%N
'==========================================================
Option Explicit
Dim FSO, NameAdd, F
Set FSO = CreateObject("Scripting.FileSystemObject")

F = WScript.Arguments(0)

'Текущие дата и время вида DD.MM.YYYY H:MM:SS
NameAdd = Now
'Преобразуем к виду DD-MM-YYYY`HH-MM-SS
NameAdd = Replace(NameAdd, ":", "-")
NameAdd = Replace(NameAdd, ".", "-")
NameAdd = Left(NameAdd, 10) & "`" & Right("0" & Mid(NameAdd, 12), 8)

If FSO.FileExists(F)   Then FSO.GetFile(F).Name   = FSO.GetBaseName(F)    & "_" & NameAdd & "." & FSO.GetExtensionName(F)
If FSO.FolderExists(F) Then FSO.GetFolder(F).Name = FSO.GetFolder(F).Name & "_" & NameAdd

Set FSO = Nothing
WScript.Quit

Добавлено: Чт май 27, 2010 18:02
Йяхе
Batya, большое спасибо!
Меняет имя у объекта под курсором.
Скажите, возможно ли выделенные файлы\каталоги обработать?
Или нужно скрипт изменять?
Попробовал другие параметры - не работает...

Добавлено: Чт май 27, 2010 18:18
Batya
Йяхе
Всё возможно. Только про выделенные файлы\каталоги выше речи не было.
Изменение параметров не поможет :)
Скрипт менять нужно. Сделаю.

Добавлено: Чт май 27, 2010 19:43
Йяхе
Batya, да, прошу прощения. Об этом я действительно не сказал.
Нужно менять имена либо выделенных файлов\каталогов, либо, если объект один, - того, который под курсором.

Добавлено: Чт май 27, 2010 20:30
Flasher
Йяхе
Если будет учитываться параметр %P%S, то это замечание явно роли не сыграет. Файл под курсором будет обрабатываться аналогично выделенному списку.

Добавлено: Чт май 27, 2010 23:18
Batya
Йяхе писал(а):Нужно менять имена либо выделенных файлов\каталогов, либо, если объект один, - того, который под курсором.

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

'==========================================================
' Переименование файлов\папок по файлу-списку -
'   Добавление текущей даты_времи в конец имени:
'   Имя_файла_DD-MM-YYYY`HH-MM-SS.расширение
'
' Параметры:
' {файл-список}
'
' Пример параметров при вызове из TC:
' %L
'==========================================================
Option Explicit
Dim FSO, NameAdd, List, F
Set FSO = CreateObject("Scripting.FileSystemObject")

List = WScript.Arguments(0)

'Текущие дата и время вида DD.MM.YYYY H:MM:SS
NameAdd = Now
'Преобразуем к виду DD-MM-YYYY`HH-MM-SS
NameAdd = Replace(NameAdd, ":", "-")
NameAdd = Replace(NameAdd, ".", "-")
NameAdd = Left(NameAdd, 10) & "`" & Right("0" & Mid(NameAdd, 12), 8)

For Each F In Split(FSO.OpenTextFile(List).ReadAll, vbNewLine)
  If F <> "" Then
    If FSO.FileExists(F)   Then FSO.GetFile(F).Name   = FSO.GetBaseName(F)    & "_" & NameAdd & "." & FSO.GetExtensionName(F)
    If FSO.FolderExists(F) Then FSO.GetFolder(F).Name = FSO.GetFolder(F).Name & "_" & NameAdd
  End If
Next

Set FSO = Nothing
WScript.Quit
Небольшой комментарий по условиям задачи - на мой взгляд было бы правильнее вставлять в имя дату не в формате DD-MM-YYYY, а YYYY-MM-DD. Так сортировка будет нормально по имени работать при одинаковой начальной части имени файла\папки.

Добавлено: Пт май 28, 2010 23:44
Йяхе
Batya, благодарю!
дату не в формате DD-MM-YYYY, а YYYY-MM-DD
Да, резонно.

Добавлено: Сб май 29, 2010 19:11
Йяхе
Batya, будьте Вы добры, заключительную поправку внесите, по поводу YYYY-MM-DD.
Мне понятно где, но как... :)

Добавлено: Сб май 29, 2010 19:31
Tol!k
Йяхе, так:

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

NameAdd = Mid(NameAdd, 7, 4) & Mid(NameAdd, 3, 4) & Left(NameAdd, 2) & "`" & Right("0" & Mid(NameAdd, 12), 8)

Добавлено: Пн май 31, 2010 12:41
Batya
Скрипт для переименования по собственной маске (маска может быть задана вторым параметром или по умолчанию через константу DefaultMask в теле скрипта):

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

'==============================================================
' Переименование файлов\папок в файле-списке по заданной маске.
'   Возможные элементы маски (с учётом регистра):
'   NNN  - имя файла\папки;
'   EEE  - расширение - только для файлов;
'   YYYY - текущий год - 4 цифры;
'   YY   - текущий год - 2 последние цифры;
'   DD   - текущий день - всегда 2 цифры;
'   D    - текущий день - убирается лидирующий 0;
'   MM   - текущий месяц - всегда 2 цифры;
'   M    - текущий месяц - убирается лидирующий 0;
'   hh   - текущий час - всегда 2 цифры;
'   h    - текущий час - убирается лидирующий 0;
'   mm   - текущая минута - всегда 2 цифры;
'   m    - текущая минута - убирается лидирующий 0;
'   ss   - текущая секунда - всегда 2 цифры;
'   s    - текущая секунда - убирается лидирующий 0;
'   ..   - точка (1 символ) - только для файлов.
'
' Параметры:
' {файл-список} [{маска}]
'
' Параметр "маска" не является обязательным -
'   будет использовано значение по умолчанию.
'
' Пример параметров при вызове из TC:
' %L "NNN_YYYY-MM-DD`hh-mm-ss..EEE"
'==============================================================
Option Explicit
'====== Изменяемые параметры ==================================
' Маска по умолчанию
Const DefaultMask = "NNN_YYYY-MM-DD`hh-mm-ss..EEE"
'==============================================================
Dim FSO, List, F, Mask, NowTime, E
Set FSO = CreateObject("Scripting.FileSystemObject")
Set E   = CreateObject("Scripting.Dictionary")

With WScript
  List = .Arguments(0)
  If .Arguments.Count > 1 Then
    Mask = .Arguments(1)
  Else
    Mask = DefaultMask
  End If
End With

NowTime = Now

With E
  .Add "YYYY", Year(NowTime)
  .Add "YY"  , Right(Year(NowTime), 2)
  .Add "DD"  , Right("0" & Day(NowTime), 2)
  .Add "D"   , Day(NowTime)
  .Add "MM"  , Right("0" & Month(NowTime), 2)
  .Add "M"   , Month(NowTime)
  .Add "hh"  , Right("0" & Hour(NowTime), 2)
  .Add "h"   , Hour(NowTime)
  .Add "mm"  , Right("0" & Minute(NowTime), 2)
  .Add "m"   , Minute(NowTime)
  .Add "ss"  , Right("0" & Second(NowTime), 2)
  .Add "s"   , Second(NowTime)
  .Add "NNN" , ""
  .Add "EEE" , ""
  .Add ".."  , ""
End With

For Each F In Split(FSO.OpenTextFile(List).ReadAll, vbNewLine)
  If F <> "" Then
    If FSO.FileExists(F) Then
      E("NNN") = FSO.GetBaseName(F)
      E("EEE") = FSO.GetExtensionName(F)
      E("..")  = "."
      FSO.GetFile(F).Name = ReplaceAll(Mask, E)
    ElseIf FSO.FolderExists(F) Then
      E("NNN") = FSO.GetFolder(F).Name
      E("EEE") = ""
      E("..")  = ""
      FSO.GetFolder(F).Name = ReplaceAll(Mask, E)
    End If
  End If
Next

Set E   = Nothing
Set FSO = Nothing
WScript.Quit

Function ReplaceAll(pName, pDic)
  Dim lK
  ReplaceAll = pName
  For Each lK In pDic.Keys
    ReplaceAll = Replace(ReplaceAll, lK, pDic(lK), 1, -1, 0)
  Next
End Function

Добавлено: Вт июн 01, 2010 14:10
sa
Batya писал(а):Скрипт для переименования по собственной маске
Удобно! Вот только может, ещё до кучи ввести последовательное добавление _2, _3 и т.д. для уже существующих имён файлов\папок?

Добавлено: Вт июн 01, 2010 17:37
Batya
sa писал(а):Вот только может, ещё до кучи ввести последовательное добавление _2, _3 и т.д. для уже существующих имён файлов\папок?
Сделал, только пока не выкладывал:
CC[n] - счётчик, где n - минимальное кол-во цифр счётчика.

sa
Вопрос:
:?: Как, на твой взгляд, должны быть переименованы по маске "YYYYMMDD_CC[2]..EEE" файлы:
Name1.txt
Name2.doc
20100601_02.xls