Автоматическое создание каталога с именем - текущая дата?

Обсуждение Total Commander. Установка, использование, настройка, решение проблем, скрытые функции. Обсуждение новых версий.

Модераторы: Моторокер, Avada, CaptainFlint, Nik, d-view

Toni
Сообщения: 26
Зарегистрирован: Ср июл 13, 2005 15:55

Автоматическое создание каталога с именем - текущая дата?

Сообщение Toni »

Приветствую. Есть такой вопрос: - мне часто приходиться создавать каталоги, именем которого должна быть просто текущая дата. Никто не подскажет, можно ли как-то этото процесс автоматизировать при помощи Тотала? :roll:
Аватара пользователя
Batya
Сообщения: 2237
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

Создай файл *.vbs, повесь его на кнопку или в меню "Запуск" и в параметрах кнопки укажи %P.

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

'=====================================================================
' Создание папки с именем системной даты

' В параметрах вызова из TC должно быть прописано:
' %P
'=====================================================================

Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")

Dim MyPath, MyDate, NewFold, M1
MyPath = WScript.Arguments(0)
MyDate = Date
NewFold = MyPath & MyDate
If Not FSO.FolderExists(NewFold) Then
  FSO.CreateFolder(NewFold)
  M1 = MsgBox("Создана папка:" & chr(13) & NewFold, vbOKOnly + vbInformation, "Результат")
Else
  M1 = MsgBox("Папка" & chr(13) & NewFold & chr(13) & "уже существует", vbOKOnly + vbExclamation, "Внимание!")
End If
Set FSO = Nothing
Wscript.Quit
Toni
Сообщения: 26
Зарегистрирован: Ср июл 13, 2005 15:55

Сообщение Toni »

Только что выяснил, что скрипт не работает, если я пытаюсь создать каталог на FTP. Т.е. захожу на FTP Сервер и пытаюсь там создать каталог... - выдает ошибку:

Строка: 16
Символ: 3
Ошибка: Недопустимое имя или номер файла
Код: 800А0034
Источник: ошибка выполнения Microsoft VBScript

Вот, увы...
Если бы можно было это как-то исправить, буду весьма благода...! :(
Аватара пользователя
Batya
Сообщения: 2237
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

Я с FTP никогда не работал. Для проверки вставь после 14-ой строки:

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

MsgBox(NewFold)
Хоть узнать, что скрипт вообще пытается создать.
Аватара пользователя
Volniy
Сообщения: 585
Зарегистрирован: Ср дек 15, 2004 00:17
Откуда: Местный

Сообщение Volniy »

Batya писал(а):Я с FTP никогда не работал.
FSO предоставляет доступ к файловой системе компьютера, тоесть к дискам, папкам, файлам. Доступ через FTP протокол - это уже совсем из другой оперы. Перепиши лучше скрипт через {F7}->имя новой папки->{ENTER}.
Toni
Сообщения: 26
Зарегистрирован: Ср июл 13, 2005 15:55

Сообщение Toni »

Batya

Вставил, не помогло!

Volniy

Спасибо за участие, только, не могли бы Вы по подробнее объяснить - что имеется ввиду? Т.е, что именно надо сделать? Как подставить скрипт к функции клавиши {F7}?
Аватара пользователя
Batya
Сообщения: 2237
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

Volniy
Понял. Спасибо за совет.
Вот только как проверять существование папки? FSO.FolderExists тоже ведь не работает (я оставил на всякий случай :))?

Toni
Вставил, не помогло!
А и не должно было помочь. Просто должно было появиться дилоговое окно с названием создаваемой папки.
По совету Volniy изменил скрипт. Проверь на работоспособность.

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

'=====================================================================
' Создание папки с именем системной даты

' В параметрах вызова из TC должно быть прописано:
' %P
'=====================================================================

Dim FSO, WS
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WS = WScript.CreateObject("WScript.Shell")

Dim MyPath, MyDate, NewFold, M1
MyPath = WScript.Arguments(0)
MyDate = Date
NewFold = MyPath & MyDate
If Not FSO.FolderExists(NewFold) Then
  Wscript.Sleep 500  
  WS.SendKeys "{F7}" & NewFold & "{Enter}"
  M1 = MsgBox("Создана папка:" & chr(13) & NewFold, vbOKOnly + vbInformation, "Результат")
Else
  M1 = MsgBox("Папка" & chr(13) & NewFold & chr(13) & "уже существует", vbOKOnly + vbExclamation, "Внимание!")
End If
Set FSO = Nothing
Set WS=Nothing
Wscript.Quit
Toni
Сообщения: 26
Зарегистрирован: Ср июл 13, 2005 15:55

Сообщение Toni »

Batya

Еще раз спасибо огромное за участие в решение проблемы!

Новый скрипт отрабатывает на FTP, но, создает каталог с именем всего пути.

Вот такой, вот каталог у меня получился:

ftpU##логин"upload.als.ru#Toni#Privat#2005.07.14

Может быть можно это как-то исправить?
Toni
Сообщения: 26
Зарегистрирован: Ср июл 13, 2005 15:55

Сообщение Toni »

Batya

Сейчас еще проверил создание новым скриптом каталога локально (на винте, не на FTP), там - тоже самое, имя каталога содержит весь путь, НО! еще и ошибка выдается:

Строка: 13
Символ: 1
Ошибка: Индекс выходит за пределы допустимого диапазона
Код: 800А0009
Аватара пользователя
Batya
Сообщения: 2237
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

Блин, ступил, когда скрипт правил, чтоб на FTP работал. Вот нормальный вариант (входные параметры уже не нужны):

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

'=======================================
' Создание папки с именем системной даты
'=======================================

Dim WS
Set WS = WScript.CreateObject("WScript.Shell")

Dim NewFold
NewFold = Date
Wscript.Sleep 500
WS.SendKeys "{F7}" & NewFold & "{Enter}"
Set WS=Nothing
Wscript.Quit
Также убрал проверку на наличие каталога - не знаю, как на FTP проверять.
Аватара пользователя
Batya
Сообщения: 2237
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

А в принципе, можно вообще обойтись одной строчкой :)

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

WScript.CreateObject("WScript.Shell").SendKeys "{F7}" & Date & "{Enter}"
Аватара пользователя
Volniy
Сообщения: 585
Зарегистрирован: Ср дек 15, 2004 00:17
Откуда: Местный

Сообщение Volniy »

Batya писал(а):Также убрал проверку на наличие каталога - не знаю, как на FTP проверять.
Можно с помощью Helper-а:

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

Set TCS = CreateObject("TCSCRIPT.Helper")
NewFold = Date
TCS.SendCommand "cm_SelectAll" 
All= TCS.GetSrcSelectedFiles
For Each a In ALL
 If StrComp(a, NewFold & "",1)=0 Then 
   MsgBox "Папка" & chr(13) & NewFold & chr(13) & "уже существует", vbExclamation, "Внимание!"
   Wscript.Quit
 End If 
Next
TCS.SendCommand "cm_MkDir",False
TCS.SendKeystroke CStr(NewFold)
TCS.SendKeystroke "{ENTER}" 
Set TCS=Nothing
Wscript.Quit
Toni
Сообщения: 26
Зарегистрирован: Ср июл 13, 2005 15:55

Сообщение Toni »

Спасибо всем (в очередной раз!!) за участие. Теперь все заработало!!! Ну, или, почти все:

Batya

Твои оба (и короткий и длинный варианты) - работают!

Volniy

А, вот, твой вариант выдает ошибку:

Строка: 7
Символ: 39
Ошибка: Предполагается наличие окончания инструкции
Код: 800А0401

Но, тем не менее, еще раз - ВСЕМ, ВСЕМ, ВСЕМ! ОГРОМНЫЙ СЭНКС!!!
Аватара пользователя
Volniy
Сообщения: 585
Зарегистрирован: Ср дек 15, 2004 00:17
Откуда: Местный

Сообщение Volniy »

Toni писал(а): Volniy
А, вот, твой вариант выдает ошибку:

Строка: 7
Символ: 39
Скрипт 100% рабочий (даже на FTP сервере проверялся). Извини, но ты, видимо перенес его текст кривовато. Это бывает. А строку эту 7-ую можешь просто убрать.
Аватара пользователя
LocKtaR-o-DarK
Сообщения: 349
Зарегистрирован: Пт авг 12, 2005 04:20
Откуда: Москва
Контактная информация:

Сообщение LocKtaR-o-DarK »

Господа это можно сделать и без скриптов.
И довольно просто.

Для этого создаем новую кнопку

В строке "Команда" пишем В строке "Параметры" пишем

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

for /f "tokens=1,2,3,4 delims=. " %%a in ('date /t') do md "%%d%%c-%%b-%%a"
Значок на свое усмотрение, конечно же.

Формат отображения тоже.

Удачи.
Закрыто