Страница 1 из 3
Вместо двоеточия знак ^
Добавлено: Сб сен 18, 2010 08:39
taravasya
Друзья! Просто нервов не хватает...
Мне нужен скрипт, по выполнению которого, тотал командер переходил бы в папку:
A:\Orders\
Date
Date - всмысле в папку, текущего дня. Я создал вот такой скрипт:
Код: Выделить всё
Dim TCS, strDayOfMonth, strMonth, strYear, YYYYMMDD
Set TCS = CreateObject("TCScript.Helper")
strDayOfMonth = right("0" & day(date()),2)
strMonth = right("0" & month(date()),2)
strYear = right (year(date()),4)
YYYYMMDD = strYear & "-" & strMonth & "-" & strDayOfMonth
TCS.SendCommand "cm_EditPath"
TCS.SendKeystroke "a:\order\" & YYYYMMDD
Set TCS = Nothing
Пустая строка осталась для Enter. Всё прекрасно работает. Вид даты отформотировался правильно(так же как и в именах папок), но вот одна ерунда, просто ни в какую не работает.... Вместо двоеточия у меня забивается знак каретки ^. Что я только не перепробовал.... Подскажите от чего так происходит? Можно ли как то решить эту проблему? Или подскажите альтернативный вариан решения задачки.
У меня кстати есть альтернативый вариант, но его не получается осуществить ввиду моей необразованности....

Прежде чем начинать править алресную строку, можно было бы перейти в корневой каталог A:\Orders\, а уж потом заходить в папку с именем текущей даты. Но к сожалению, как я сказал выше у меня это не выходит...
Добавлено: Сб сен 18, 2010 09:59
Вахмурка
Есть ткая замечательная программа
xxcopy, возможности которой просто безграничны. Цитирую справку к ней:
----- Predefined macros to embed current date and time ----
/$xxxx$ Predefined macros for current date and time which may appear
anywhere in the command argument and other XXCOPY parameters.
Examples below are for the current time, Dec 25, 2002 13:15:30.
/$DATE$ Expands to month and date (equivalent to /$MMDD$) --> "1225".
/$TIME$ Expands to hour and minutes (equiv. /$HHNN$) --> "1315".
/$YYMMDD$ Expands to 2-digit year month day --> "021225".
/$YYYY-MM$ Expands to 4-digit year month --> "2002-12".
/$HHNNSS$ Expands to hour minutes second --> "131530".
/$MON-DD$ Expands to month day --> "DEC-25".
/$II-IWK-K$ Expands to ISO 8601 year-wkno-dow --> "02-W52-3".
То есть она "понимает" текущую дату и время.
Суть твоей задачи, я так вижу, выполнить
где "ххх" - текущая (сегодняшняя) дата. Можно попробовать использовать xxcopy. Например, так - она составляет список директорий (точно умеет) и каким-то образом (пока не думал каким) "узнает", какая из них соответствует $DATE$, и возвращает это имя.
Сам я с этими макросами не игрался, а сейчас немного занят. Может, попозже, самому интересно. Но тебе скачать программу, зайти на сайт, почитать справку - явно имеет смысл.
Добавлено: Сб сен 18, 2010 15:24
MVV
Аж интересно стало, как программа может вернуть имя:)
taravasya, а двоеточие случайно не является каким-либо специальным символом? Может, его надо как-нибудь экранировать?
И зачем использовать ручную правку пути? Разве в TCScript.Helper нет функции смены каталога? Я его ни разу в глаза не видел, но уверен, что про эту функцию создатели не могли забыть.
И еще просьба (думаю, модераторы меня поддержат) не употреблять ненормативную лексику на данном ресурсе (тем более, капсом).
Добавлено: Сб сен 18, 2010 15:51
taravasya
MVV писал(а):Может, его надо как-нибудь экранировать?
Как это делается?
MVV писал(а):Разве в TCScript.Helper нет функции смены каталога?
Почему же... есть. Назад, вперёд, под курсором, мой компьютер.... да их много... Но вот такой команды, что-бы взять и одним действием перейти в "произвольный" каталог я не встречал. (естесственно кроме командной и адресной строк). Кстати! Как вариант можно будет попробовать камандную строку тотала использовать. Где то я видел такое.
Добавлено: Сб сен 18, 2010 15:53
Вахмурка
Аж интересно стало, как программа может вернуть имя
Управлние xxcopy осуществляется почти исключительно из батников ввиду очевидных неудобств управления напрямую из ком.строки. Говоря "вернуть", я имел в виду примерно следующее - в батнике проверяется некое условие (например, равенство имени директории имени, сформированному из даты) и, в случае истины, копируется файл в директорию.
Добавлено: Сб сен 18, 2010 18:20
taravasya
Всё!!! Пришлось его заставить.....
Код: Выделить всё
Dim TCS, strDayOfMonth, strMonth, strYear, YYYYMMDD
Set TCS = CreateObject("TCScript.Helper")
strDayOfMonth = right("0" & day(date()),2)
strMonth = right("0" & month(date()),2)
strYear = right (year(date()),4)
YYYYMMDD = strYear & "-" & strMonth & "-" & strDayOfMonth
TCS.SendCommand "cm_EditPath"
TCS.SendKeystroke "a" & Chr(58) & "\order\" & YYYYMMDD
TCS.SendKeystroke "{Enter}"
Set TCS = Nothing
Таким образом вместо двоеточия в коде, я указал ему конкретный символ. Теперь можно переименовать тему на:
Скрипт для мгновенной смены каталога.
Добавлено: Сб сен 18, 2010 19:14
Tol!k
Код: Выделить всё
TOTALCMD#BAR#DATA
%ComSpec% /c for /f "tokens=1,2,3 delims=./-" %a in ("%date%") do "%commander_path%\totalcmd.exe"
/o /s /l="D:\Orders\%%c%%b%%a"
%commander_path%\totalcmd.exe,5
Перейти в папку с сегодняшней датой
1
-1
Добавлено: Сб сен 18, 2010 19:26
taravasya
У меня переходит в корень диска D, и на этом навигация заканчивается. У Вас это работает? Я не пойму, у меня что, что то неладное в системе с двоеточием?
Кроме того, подозреваю, что у Вас не отформатирована дата. У меня папка смотрится так:
a:\orders\2010-09-18\
Добавлено: Сб сен 18, 2010 19:37
Flasher
taravasya
Ну Вы даётес. Поплыли:
taravasya писал(а):Вместо двоеточия у меня забивается знак каретки ^
SendKeystore имитирует нажатие клавиш, но при этом не следит за раскладкой. Символ ":" русской раскладки находится на клавиатуре сопряжённо с символом "^", как и с цифрой 6. Поэтому совет банален: вызывать двоеточие по клавише где находится буква Ж, т.е. писать ":" в английской раскладке.
taravasya писал(а):Но вот такой команды, что-бы взять и одним действием перейти в "произвольный" каталог я не встречал.
Ну что'ж так плохо читаем ReadMe? Я же
тут только скрипт привёл, где она есть, только в другую панель. Команда TCS.SetTrgPath. А в текущую TCS.SetSrcPath, соответственно.
Поэтому в скрипте меняем строки:
Код: Выделить всё
TCS.SendCommand "cm_EditPath"
TCS.SendKeystroke "a" & Chr(58) & "\order" & YYYYMMDD
TCS.SendKeystroke "{Enter}"
на
Код: Выделить всё
Path = "A:\order" & YYYYMMDD
TCS.SetSrcPath(Path)
А если нужно в новой вкладке, то TCS.SetSrcPath(Path, True)
Добавлено: Сб сен 18, 2010 19:49
taravasya
Flasher писал(а):Ну что'ж так плохо читаем ReadMe?
Да честно говоря не очень внимательно и читал. Времени особо нет. Все не имеющее прямого отношения к работе, на коленках делается

увы...
Flasher
Спасибо большое за подсказку. Действительно, Ваш метод думаю будет надёжнее.
А вот с двоеточием, непоняточка. У меня на клавиатуре, двоеточие только и получается при англицкой раскладке через
Shift+: 
Добавлено: Сб сен 18, 2010 19:52
Tol!k
taravasya писал(а):У меня папка смотрится так: a:\orders\2010-09-18\
Замените
/o /s /l="
D:\Orders\%%c%%b%%a" на
/o /s /l="
A:\Orders\%%c-%%b-%%a"
Добавлено: Сб сен 18, 2010 19:59
taravasya
Теперь стопорится в диске а:\

Добавлено: Сб сен 18, 2010 20:01
Flasher
taravasya писал(а):А вот с двоеточием, непоняточка. У меня на клавиатуре, двоеточие только и получается при англицкой раскладке через Shift+:
Его можно вызывать хоть так -
TCS.SendKeystore "+{;}", хоть так -
TCS.SendKeystore ":". Не суть важно.
Добавлено: Сб сен 18, 2010 20:04
taravasya
Ну первый вариант я не пробовал, а вот второй вводил ^ Я же говорю... по всякому пробовал. chr( 58 ), срабатывает без осечек.
Добавлено: Сб сен 18, 2010 20:17
Tol!k
taravasya писал(а):Теперь стопорится в диске а:\

У Вас в скриптах order, а на словах order
S. Определитесь уже.