WSH + TCScript = мощное средство автоматизации TC!

Форум о самом популярном файловом менеджере Total Commander

Сообщение SAM » Пт дек 10, 2004 7:36 am

2Volniy
Идея использовать сам скрипт в качестве INI-файла - хороша. Только долго пришлось думать как заставить скрипт не ругаться на имя секции. Вот что получилось в итоге:
Код: выделить все
Option Explicit
Dim TCS, sFile, FilterState, Value
Const sFilter = ">Последние файлы - 3 дня"
[FilterState]=0
Value=0
sFile = WScript.ScriptFullName
Set TCS = CreateObject("TCSCRIPT.Helper")
TCS.Wait = True
If Value=0 Then
   TCS.SendCommand "cm_SrcUserDef"
   TCS.SendKeystroke sFilter & "{ENTER}"
   TCS.INIWrite sFile, "FilterState", "Value", 1
Else
   TCS.SendCommand "cm_SrcAllFiles"
   TCS.INIWrite sFile, "FilterState", "Value", 0
End If

Set TCS = Nothing
WScript.Quit

Совсем маленький и работает <!--emo&:)-->[img]style_emoticons/<#EMO_DIR#>/smile.gif[/img]<!--endemo-->
SAM
Старшина
 
Сообщений: 45
Зарегистрирован: Пн май 24, 2004 5:33 am
Пункты репутации: 0

Сообщение Batya » Пт дек 10, 2004 9:26 am

2Volniy
2SAM
<!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->Элементарно: возьми имя выделенного в панели файла с полным путем и вытащи из него сам путь. <!--QuoteEnd--></div><!--QuoteEEnd-->
<!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->А вот тут ты похоже забыл, что сам придумал <!--QuoteEnd--></div><!--QuoteEEnd-->
Не. Я не совсем это имел ввиду.
Я спрашивал про возможность в WHS работы с элементами окна. На панели с именем текущего каталога отображается наложенный фильтр. Вот и вопрос - нельзя ли из этой панели средствами WHS выдрать Caption, а уже оттуда - фильтр?
Batya
Ст. лейтенант
 
Сообщений: 146
Зарегистрирован: Вт апр 29, 2003 8:28 am
Откуда: Москва
Пункты репутации: 0

Сообщение Volniy » Пт дек 10, 2004 6:30 pm

<!--QuoteBegin-SAM+Dec 10 2004, 08:41--><div class='quotetop'>QUOTE(SAM @ Dec 10 2004, 08:41)</div><div class='quotemain'><!--QuoteEBegin-->А вот тут ты похоже забыл, что сам придумал

<!--QuoteEnd--></div><!--QuoteEEnd-->
И точно - я забыл <!--emo&:unsure:-->[img]style_emoticons/<#EMO_DIR#>/unsure.gif[/img]<!--endemo--> Давно не видел <!--emo&:)-->[img]style_emoticons/<#EMO_DIR#>/smile.gif[/img]<!--endemo-->

<!--QuoteBegin-SAM+Dec 10 2004, 09:36--><div class='quotetop'>QUOTE(SAM @ Dec 10 2004, 09:36)</div><div class='quotemain'><!--QuoteEBegin-->[FilterState]=0
Value=0
<!--QuoteEnd--></div><!--QuoteEEnd-->
Фантазия у тебя, однако: перемешал код с содержимым ИНИ-файла!
Ну нету никакого смысла помещать секцию внутри кода скрипта.
Расположенный после строки
Код: выделить все
WScript.Quit
код, не являющийся функцией/процедурой, интерпретатором просто игнорируется (можешь туда хоть стихи Пушкина записывать:) ). А метод INIwrite сам будет создавать эту секцию именно в конце файла скрипта , так что за это беспокоиться совсем и не нужно.

<!--QuoteBegin-Batya+Dec 10 2004, 11:26--><div class='quotetop'>QUOTE(Batya @ Dec 10 2004, 11:26)</div><div class='quotemain'><!--QuoteEBegin-->На панели с именем текущего каталога отображается наложенный фильтр. Вот и вопрос - нельзя ли из этой панели средствами WHS выдрать Caption, а уже оттуда - фильтр?
<!--QuoteEnd--></div><!--QuoteEEnd-->
Если ты имеешь ввиду WSH (Windows Scripting Host) сам по себе, то он работать с окнами напрямую не умеет. А вот в Хелпер можно такую фичу впереть.
Последний раз редактировалось Volniy Пн дек 13, 2004 7:39 am, всего редактировалось 1 раз.
Volniy
Ст. лейтенант
 
Сообщений: 121
Зарегистрирован: Сб ноя 22, 2003 11:42 pm
Пункты репутации: 0

Сообщение Volniy » Пн дек 13, 2004 7:49 am

<a href='http://wincmd.ru/files/tcwshelp_b7.zip' target='_blank'>Очередная (7-ая по счету) бета Хелпера</a>.

<!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->
  • GetFilter(PanelPath)  возращает  текущий  фильтр  (в  том числе и если он именованный поисковый),  примененный  в  панели,  имеющей  путь PanelPath (пример использования: Filter=GetFilter(GetTrgPath))
    </li>
  • Исправлена ошибка: GetTrgPath возращал путь к панели-источнику <!--emo&:(-->[img]style_emoticons/<#EMO_DIR#>/sad.gif[/img]<!--endemo-->
    </li>
  • Кроме того, возвращаемые пути GetTrgPath и GetSrcPath для удобства теперь никогда не имеют обратной черты в конце пути, даже если это и корневая директория.
    </li>
  • В архив добавлена полная дока по SendKeystroke.
    </li>
  • Подкорректированы демо-примеры.</li>
<!--QuoteEnd--></div><!--QuoteEEnd-->
Volniy
Ст. лейтенант
 
Сообщений: 121
Зарегистрирован: Сб ноя 22, 2003 11:42 pm
Пункты репутации: 0

Сообщение Ciber SLasH » Чт дек 23, 2004 4:52 am

Наваял я себе скриптик для упаковки/распаковки upx'ом выделенных файлов в ТС (или текущего). Может кому пригодится <!--emo&:)-->[img]style_emoticons/<#EMO_DIR#>/smile.gif[/img]<!--endemo-->

UPX.js:
Код: выделить все
var UPX_FileName

/* Извлечение пути из имени файла */
function ExtractFilePath(FileName) {
var Len, Result
Result = FileName
Len = Result.length
for (i = Len; i > 0; i--)
 if (Result.charAt(i) == '\\') {
   Result = Result.substring(0, i+1)
   UPX_FileName = FileName.substring(i+1, FileName.length)
   break
 }
return Result
}

//==[ Константы для MsgBox ]====================================================
var MB_OK = 0x0
var MB_ICONERROR = 0x10
//==[ Текст MsgBox'a ]==========================================================
var MsgText = 'Неверные параметры коммандной строки !!\n\n' +
             'Список параметров:\n' +
             '1 - полный путь к "upx.exe"\n' +
             '2 - полный путь к файлу-списку, в котором в\n' +
             'каждой строке прописан полный путь к файлу,\n' +
             'который подлежит упаковки/распаковки\n\n' +
             'Все остальные параметры - это ключи upx-a'
////////////////////////////////////////////////////////////////////////////////
var WSHShell = WScript.CreateObject("WScript.Shell")
var FSO = new ActiveXObject("Scripting.FileSystemObject")
var TC_Path = 'COMMANDER_PATH'
var UPX_Path, FileList, ST
var Args = WScript.Arguments  // аргументы, переданные скрипту

if (Args.length < 3) {
 WSHShell.Popup(MsgText, 0, 'Error (UPX script)', MB_OK || MB_ICONERROR)
 FSO.Quit
 WScript.Quit()
}

UPX_Path = Args.Item(0);  // путь к upx'у (1-параметр)
UPX_Path = ExtractFilePath(UPX_Path)  // разбиваем путь на: путь и имя файла
FileList = Args.Item(1);  // путь к файлу-списку (2-параметр)
ST = UPX_Path.substring(1, 15)  // копируем в ST 14 символов из UPX_Path для проверки на COMMANDER_PATH
ST = ST.toUpperCase()           // переводим ST в верхний регистр
if (ST == TC_Path) {
 var sPath = UPX_Path.substring(16, UPX_Path.length)  // в sPath копируем вторую половину пути, после %COMMANDER_PATH%
 var TempDir = FSO.GetSpecialFolder(2).Path           // узнаём где в системе хранится мусор (TEMP)
 // Перенаправляем комманду SET в файл для дальнейшего поиска переменной окружения COMMANDER_PATH
 WSHShell.Run('%comspec% /C SET > ' + TempDir + '\\SET_cmd.log')
 WScript.Sleep(500)  // вставляем задержку, т.к. без неё предыдущая команда не успевает выполниться
 var fSet = FSO.OpenTextFile(TempDir + '\\SET_cmd.log', 1, false)
 while (!fSet.AtEndOfStream) {
   ST = fSet.ReadLine()
   // Если первые 14 символов совпадают с переменной COMMANDER_PATH, то ...
   if (ST.substring(0, 14) == TC_Path) {
     // Формируем путь к upx.exe, заменяя COMMANDER_PATH на абсолютный путь
     UPX_Path = ST.substring(15, ST.length) + sPath + UPX_FileName
     break
   }
 }
 fSet.close()
 FSO.DeleteFile(TempDir + '\\SET_cmd.log')
}
else
 UPX_Path += UPX_FileName

try {
 var f = FSO.GetFile(UPX_Path)
 UPX_Path = f.Path
}
catch (e) {
 WSHShell.Popup('Не удалось найти файл: ' + UPX_Path, 0, 'Error (UPX script -> FSO.GetFile)', MB_OK || MB_ICONERROR)
 FSO.Quit
 WScript.Quit()
}

var UPX_Keys = ''  // ключи upx'a
for (i = 2; i < Args.length; i++)  // считываем все параметры, начиная с 3-его
 UPX_Keys = UPX_Keys + ' ' + Args.Item(i) + ' '

var fList = FSO.OpenTextFile(FileList, 1, false)
var CmdLine = ''  // командная строка, передаваемая upx'у

while (!fList.AtEndOfStream) {
 CmdLine = fList.ReadLine()
 if (!FSO.FileExists(CmdLine)) {
   WSHShell.Popup('Не удалось найти файл: ' + CmdLine, 0, 'Error (UPX script)', MB_OK || MB_ICONERROR)
   fList.close()
   FSO.Quit
   WScript.Quit()
 }
 CmdLine = '"' + UPX_Path + '"' + UPX_Keys + '"' + CmdLine + '"'
 WSHShell.Run(CmdLine)
}
fList.close()
FSO.Quit
WSHShell.Quit

Можно юзать переменную %Commander_Path%, но желательно обходится без неё. У меня например upx.exe лежит в "E:\Program Files\Archives\UPX\upx.exe", а этот скрипт в "E:\Program Files\Shells\Total Commander\Scripts\UPX.js" и для того, чтобы не юзать путь "%Commander_Path%\..\..\Archives\UPX\upx.exe" я пишу так ".\..\..\..\Archives\UPX\upx.exe" (т.е. из текущей папки, а текущей является "E:\Program Files\Shells\Total Commander\Scripts", путь переходит в папку с upx'ом).

Я повесил этот скрипт в меню "Запуск" с такими параметрами:
1) пункт меню "UPX - Распаковать"
Команда: UPX.js
Параметры: .\..\..\..\Archives\UPX\upx.exe %L -d
Путь запуска: %Commander_Path%\Scripts
2) пункт меню "UPX - Упаковать"
Команда: UPX.js
Параметры: .\..\..\..\Archives\UPX\upx.exe %L -9
Путь запуска: %Commander_Path%\Scripts

В строке "Путь запуска" переменную %Commander_Path% можно юзать не опасаясь, она всё равно в скрипт не передаётся, а вот в "Параметры" тут надо поэкспериментировать (может потребуется задержку побольше поставить после камандой "WSHShell.Run('%comspec% /C SET > ' + TempDir + '\\SET_cmd.log')". У меня работает и с переменной и без неё).

Кстати может кто-нить знает почему скрипты не распознают переменные окружения ?
Последний раз редактировалось Ciber SLasH Чт дек 23, 2004 5:00 am, всего редактировалось 1 раз.
Ciber SLasH
Майор
 
Сообщений: 314
Зарегистрирован: Пн ноя 24, 2003 11:28 am
Откуда: Питер
Пункты репутации: 0

Сообщение SAM » Чт дек 23, 2004 9:47 am

2Ciber SLasH
Круто :)
Мне, правда, хватает такого:
<!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->Команда: %commander_path%\ARC\UPX\upx.exe
Параметры: %p%n -9 -q --compress-icons=0 --all-methods -k
<!--QuoteEnd--></div><!--QuoteEEnd-->

Мудрено ты COMMANDER_PATH ищешь. Можно проще:
<span style='color:purple'>test.js</span>
Код: выделить все
// Способ 1
var WshShell = WScript.CreateObject("WScript.Shell");
cmdpath = WshShell.ExpandEnvironmentStrings("%COMMANDER_PATH%");
WScript.Echo(cmdpath);
// Способ 2
var WshSysEnv = WshShell.Environment("Process");
cmdpath = WshSysEnv("COMMANDER_PATH");
WScript.Echo(cmdpath);
SAM
Старшина
 
Сообщений: 45
Зарегистрирован: Пн май 24, 2004 5:33 am
Пункты репутации: 0

Сообщение SAM » Чт дек 23, 2004 9:53 am

<span style='color:red'>ALL</span>

Понимаю, что не совсем в тему, но может быть кто подскажет как загрузить файл (не текст страницы - с ним все ОК, а файл) с помощью <span style='color:blue'>InternetExplorer.Application</span>
SAM
Старшина
 
Сообщений: 45
Зарегистрирован: Пн май 24, 2004 5:33 am
Пункты репутации: 0

Сообщение Ciber SLasH » Чт дек 23, 2004 2:14 pm

2SAM:
10x за методы чтения переменных окружения, я просто ещё новичок в этом, т.к. что и не знал что можно таким макаром эти переменные читать, пришлось извратиться :)

А вот ещё возник вопросик: а можно с помощью WSH вызывать функции из DLL ?

ЗЫ: Где можно нарыть отладчик WSH-JavaScript'ов ? Качнул я VbsEdit / JsEdit 2.0, но так и не въехал как же там отлаживать, да и вообще не понравился мне он.
Ciber SLasH
Майор
 
Сообщений: 314
Зарегистрирован: Пн ноя 24, 2003 11:28 am
Откуда: Питер
Пункты репутации: 0

Сообщение Volniy » Чт дек 23, 2004 2:49 pm

Наконец-то тут появился скрипт на JS! И ведь работает же :). Несколько замечаний по коду.

1) Методов FSO.Quit и WSHShell.Quit не существует (все эти строки следует удалить из скрипта). И вообще в JS создаваемые объекты удаляются автоматически.
2) Зачем функция ExtractFilePath, если есть готовые методы у FSO?
3) Очень сложные и imho ненужные разборки с %commander_path%. Всего-то и надо было поставить по два символа процента, например %%commander_path%%\upx.exe %L -9.

С учетом замечаний (в том числе и не высказанных) и не претендуя на авторство, мой вариант реализации скрипта.
Код: выделить все
//==[ Константы для MsgBox ]==
var MB_OK = 0x0
var MB_ICONERROR = 0x10
//==[ Текст MsgBox'a ]==
var MsgText = 'Неверные параметры коммандной строки !!\n\n' +
            'Список параметров:\n' +
            '1 - путь к "upx.exe" (может содержать %commander_path%)\n' +
            '2 - полный путь к файлу-списку, в котором в\n' +
            'каждой строке прописан полный путь к файлу,\n' +
            'который подлежит упаковке/распаковке\n\n' +
            'Все остальные параметры - это ключи для UPX-a'

var WSHShell = new ActiveXObject("WScript.Shell")
var FSO = new ActiveXObject("Scripting.FileSystemObject")
var Args = WScript.Arguments  // аргументы, переданные скрипту

if (Args.length < 3) {
WSHShell.Popup(MsgText, 0, 'Error (UPX script)', MB_OK || MB_ICONERROR)
WScript.Quit()
}

var UPX_Path = WSHShell.ExpandEnvironmentStrings(Args.Item(0));
var FileList =Args.Item(1);

if (!FSO.FileExists(UPX_Path)) {
  WSHShell.Popup(UPX_Path + ' не найден!', 0, 'Error (UPX script)', MB_OK || MB_ICONERROR)
  WScript.Quit()
}

var UPX_Keys = ''  // ключи upx'a
for (i = 2; i < Args.length; i++)  // считываем все параметры, начиная с 3-его
UPX_Keys = UPX_Keys + ' ' + Args.Item(i) + ' '

var fList = FSO.OpenTextFile(FileList, 1, false)
var CmdLine = ''  // командная строка, передаваемая UPX'у

while (!fList.AtEndOfStream) {
CmdLine = fList.ReadLine()
if (!FSO.FileExists(CmdLine)) {
  WSHShell.Popup('Не удалось найти файл: ' + CmdLine, 0, 'Error (UPX script)', MB_OK || MB_ICONERROR)
  fList.Close()
  WScript.Quit()
}
CmdLine = '"' + UPX_Path + '"' + UPX_Keys + '"' + CmdLine + '"'
WSHShell.Run(CmdLine, 1, true)
}
fList.Close()
WScript.Quit()
Volniy
Ст. лейтенант
 
Сообщений: 121
Зарегистрирован: Сб ноя 22, 2003 11:42 pm
Пункты репутации: 0

Сообщение SAM » Пт дек 24, 2004 7:12 am

2Ciber SLasH
<!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->а можно с помощью WSH вызывать функции из DLL ?<!--QuoteEnd--></div><!--QuoteEEnd-->
Если эта dll зарегистрирована как COM-сервер, то конечно <!--emo&:blink:-->[img]style_emoticons/<#EMO_DIR#>/blink.gif[/img]<!--endemo-->
<!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->Где можно нарыть отладчик WSH-JavaScript'ов ?<!--QuoteEnd--></div><!--QuoteEEnd-->
Заходим в Свойства Интернет - Дополнительно и убираем галочку с пункта "Запретить отладку сценариев". Не слишком удобный, правда, но даже такой монстр как PrimalScript использует для отладки именно его.
<span style='font-size:8pt;line-height:100%'><span style='color:red'>(Сейчас я говорю только про отладку, а не про проверку синтаксиса и не про подсказки свойств/методов)</span></span>
SAM
Старшина
 
Сообщений: 45
Зарегистрирован: Пн май 24, 2004 5:33 am
Пункты репутации: 0

Сообщение SAM » Пт дек 24, 2004 8:11 am

Че то я замутил... :unsure: Тыкать в свойства IE - это для отладки ie-шных скриптов... Вообще то, говоря про отладчик, я имел в виду Microsoft Script Editor (идет с Офисом). Именно он у меня подключается в качестве дебаггера...
SAM
Старшина
 
Сообщений: 45
Зарегистрирован: Пн май 24, 2004 5:33 am
Пункты репутации: 0

Сообщение Ciber SLasH » Пт дек 24, 2004 9:14 pm

2Volniy:
<!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->1) Методов FSO.Quit и WSHShell.Quit не существует (все эти строки следует удалить из скрипта)<!--QuoteEnd--></div><!--QuoteEEnd-->
Почему же не существует... всё существует. Эти методы нужны для освобождения объектов "Scripting.FileSystemObject" и "WScript.Shell". Ну если ты говоришь что они не нужны, ОК не буду их юзать.
<!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->Зачем функция ExtractFilePath, если есть готовые методы у FSO?<!--QuoteEnd--></div><!--QuoteEEnd-->
Да ведь я в предыдущем посту говорил, что я ещё индеец в этих скриптах и поэтому ещё мало чего знаю. Кстати раскажи как можно стандартным образом выковырять путь из полного имени файла ?
<!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->Очень сложные и imho ненужные разборки с %commander_path%<!--QuoteEnd--></div><!--QuoteEEnd-->
Смотри выше (про индейца <!--emo&:)-->[img]style_emoticons/<#EMO_DIR#>/smile.gif[/img]<!--endemo-->
<!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->С учетом замечаний (в том числе и не высказанных) и не претендуя на авторство, мой вариант реализации скрипта.<!--QuoteEnd--></div><!--QuoteEEnd-->
Спасибо за ликбез, но я ещё кой-чего придумал... вот код (с учётом почти всех замечаний, кой-чего я всё же оставил ИМХО):

UPX.js:
Код: выделить все
//==[ Константы для MsgBox ]====================================================
var MB_OK = 0x0
var MB_YESNO = 0x4
var MB_ICONERROR = 0x10
var MB_ICONWARNING = 0x30
var ID_NO = 7
//==[ Текст MsgBox'a ]==========================================================
var MsgText = 'Неверные параметры коммандной строки !!\n\n' +
             'Список параметров:\n' +
             '1 - полный путь к "upx.exe"\n' +
             '2 - полный путь к файлу-списку, в котором в\n' +
             'каждой строке прописан полный путь к файлу,\n' +
             'который подлежит упаковки/распаковки\n\n' +
             'Все остальные параметры - это ключи upx-a'
////////////////////////////////////////////////////////////////////////////////
var WSHShell = WScript.CreateObject("WScript.Shell")
var FSO = new ActiveXObject("Scripting.FileSystemObject")
var UPX_Path, FileList, ST
var Args = WScript.Arguments  // аргументы, переданные скрипту

if (Args.length < 3) {
 WSHShell.Popup(MsgText, 0, 'Warning (UPX script)', MB_OK | MB_ICONWARNING)
 WScript.Quit()
}
UPX_Path = Args.Item(0);  // путь к upx'у (1-параметр)
FileList = Args.Item(1);  // путь к файлу-списку (2-параметр)
if (UPX_Path.charAt(0) == '%') {  // проверяем 1-символ на наличие символа "%"
 var i  // для запоминания позиции второго символа "%"
 for (i = 1; i < UPX_Path.length; i++)
   if (UPX_Path.charAt(i) == '%') {
     ST = UPX_Path.substring(0, i+1)  // сохранили в ST переданную переменную окружения
     break
   }
 // В sPath копируем вторую половину пути, после указанной в пути 1-параметра переменной окружения
 var sPath = UPX_Path.substring(i+1, UPX_Path.length)  
 //WScript.Echo('38. sPath:', sPath)
 ST = WSHShell.ExpandEnvironmentStrings(ST)  // читаем переменную окружения
 // Формируем путь к upx.exe, заменяя переменную окружения на абсолютный путь
 UPX_Path = ST + sPath
}
try {
 var f = FSO.GetFile(UPX_Path)
 UPX_Path = f.Path  // для получения абсолютного пути к upx.exe
}
catch (e) {
 WSHShell.Popup('Не удалось найти файл: ' + UPX_Path, 0, 'Error (UPX script: 46)', MB_OK | MB_ICONERROR)
 WScript.Quit()
}
try {
 var fList = FSO.OpenTextFile(FileList, 1, false)
}
catch (e) {
 WSHShell.Popup('Не удалось найти файл: ' + FileList, 0, 'Error (UPX script: 53)', MB_OK | MB_ICONERROR)
 WScript.Quit()
}

var UPX_Keys = ''  // ключи upx'a

for (i = 2; i < Args.length; i++)  // считываем все параметры, начиная с 3-его
 UPX_Keys = UPX_Keys + ' ' + Args.Item(i) + ' '

var CmdLine = ''  // командная строка, передаваемая upx'у
var mbRez = ID_NO

while (!fList.AtEndOfStream) {
 CmdLine = fList.ReadLine()
 if (!FSO.FileExists(CmdLine)) {
   if (mbRez = ID_NO) {
     mbRez = WSHShell.Popup('Не удалось найти файл: ' + CmdLine + '\n\nПропускать файлы с не найденными путями ?',
                            0, 'Error (UPX script: 70)', MB_YESNO | MB_ICONERROR)
     if (mbRez = ID_NO)
       WScript.Quit()
   }
 }
 CmdLine = '"' + UPX_Path + '"' + UPX_Keys + '"' + CmdLine + '"'
 WSHShell.Run(CmdLine)
}
fList.close()

Теперь в параметрах запуска скрипта можно на всю катушку юзать любые переменные окружения, определённые в системе !!

ЗЫ: Возник такой вопрос: почему в HTML'ных JavaScript'ах в можно юзать зарезервированное слово для констант <span style='color:blue'>const</span>, а в отдельности нет (т.е. пытался написать константы не через "var", а через "const" и возникла ошибка, мол такого определения нет) ?
Последний раз редактировалось Ciber SLasH Пт дек 24, 2004 9:33 pm, всего редактировалось 1 раз.
Ciber SLasH
Майор
 
Сообщений: 314
Зарегистрирован: Пн ноя 24, 2003 11:28 am
Откуда: Питер
Пункты репутации: 0

Сообщение Volniy » Сб дек 25, 2004 11:00 am

<!--QuoteBegin-Ciber SLasH+Dec 24 2004, 23:14--><div class='quotetop'>QUOTE(Ciber SLasH @ Dec 24 2004, 23:14)</div><div class='quotemain'><!--QuoteEBegin-->Да ведь я в предыдущем посту говорил, что я ещё индеец в этих скриптах и поэтому ещё мало чего знаю. Кстати раскажи как можно стандартным образом выковырять путь из полного имени файла ?<!--QuoteEnd--></div><!--QuoteEEnd-->

Получить путь: FSO.GetParentFolderName(pathname)
Получить имя: FSO.GetFileName(pathname)
Объединить (правильно!) путь с именем: FSO.BuildPath(path, name)

<!--QuoteBegin-Ciber SLasH+Dec 24 2004, 23:14--><div class='quotetop'>QUOTE(Ciber SLasH @ Dec 24 2004, 23:14)</div><div class='quotemain'><!--QuoteEBegin-->Теперь в параметрах запуска скрипта можно на всю катушку юзать любые переменные окружения, определённые в системе !!<!--QuoteEnd--></div><!--QuoteEEnd-->
Дык ты ж еще и упрямый, индеец! <!--emo&:)-->[img]style_emoticons/<#EMO_DIR#>/smile.gif[/img]<!--endemo-->
Я же ранее объяснял, что в параметрах запуска итак можно использовать любые переменные окружения, без всяческих изысков. А все проблемы у тебя были из-за того, что знак процента Гислером зарезервирован для специальных целей (присмотрись к надписям внизу диалога настроек Меню Запуска) и поэтому, чтобы этот символ все-таки передавался в параметры запуска, этот символ нужно продублировать. И все, и не нужно разбирать строку с переменными окружения, работу эту за вас сделает WSHShell.ExpandEnvironmentStrings.
Посему (без обид?) измененный вариант скрипта я даже не коментирую.

<!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->ЗЫ: Возник такой вопрос: почему в HTML'ных JavaScript'ах в можно юзать зарезервированное слово для констант <span style='color:blue'>const</span>, а в отдельности нет (т.е. пытался написать константы не через "var", а через "const" и возникла ошибка, мол такого определения нет) ?
<!--QuoteEnd--></div><!--QuoteEEnd-->
А ты случаем не путаешь с синтаксисом Visual Basic скриптов?
Volniy
Ст. лейтенант
 
Сообщений: 121
Зарегистрирован: Сб ноя 22, 2003 11:42 pm
Пункты репутации: 0

Сообщение Ciber SLasH » Сб дек 25, 2004 5:26 pm

2Volniy:
<!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->Получить путь: FSO.GetParentFolderName(pathname)
Получить имя: FSO.GetFileName(pathname)
Объединить (правильно!) путь с именем: FSO.BuildPath(path, name)
<!--QuoteEnd--></div><!--QuoteEEnd-->
10x
<!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin--> А все проблемы у тебя были из-за того, что знак процента Гислером зарезервирован для специальных целей (присмотрись к надписям внизу диалога настроек Меню Запуска) и поэтому, чтобы этот символ все-таки передавался в параметры запуска, этот символ нужно продублировать
<!--QuoteEnd--></div><!--QuoteEEnd-->
Да я и так в параметрах писал: %%Commander_Path%%
Но даже так скрипт без разбора этой переменной (т.е. если сразу запускать команду: %%Commander_Path%%\..\..\Archives\UPX\upx.exe) вылетеал с ошибкой. Вот по этому я и разбираю переменные окружения в скрипте.
<!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->А ты случаем не путаешь с синтаксисом Visual Basic скриптов?
<!--QuoteEnd--></div><!--QuoteEEnd-->
Да нет, в спецификации JavaScript для HTML есть зарезервированное для объявлений констант, слово const.

Взято из JavaScript справочника:
<!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->const JavaScript 1.5, NES 6.0 (расширение Netscape, только C-машина).

Объявляет именованную константу только-для-чтения.

Создаёт константу, которая может быть глобальной или локальной по отношению к функции, в которой объявляется. Константы следуют тем же правилам области видимости, что и переменные.

Значение константы не может быть изменено с помощью присвоения, и константа не может быть переобъявлена.

Константа не может иметь то же имя, что и функция или переменная в той же области видимости.

 
Синтаксис:
const constname [= value] [..., constname [= value] ] 
 
Пример:

Скрипт:

const a = 7;
document.writeln("a равно " + a + ".");

даёт на выходе:

a равно 7
<!--QuoteEnd--></div><!--QuoteEEnd-->
Ciber SLasH
Майор
 
Сообщений: 314
Зарегистрирован: Пн ноя 24, 2003 11:28 am
Откуда: Питер
Пункты репутации: 0

Сообщение Volniy » Вс дек 26, 2004 12:14 am

<!--QuoteBegin-Ciber SLasH+Dec 25 2004, 19:26--><div class='quotetop'>QUOTE(Ciber SLasH @ Dec 25 2004, 19:26)</div><div class='quotemain'><!--QuoteEBegin-->
Да я и так в параметрах писал: %%Commander_Path%%
Но даже так скрипт без разбора этой переменной (т.е. если сразу запускать команду: %%Commander_Path%%\..\..\Archives\UPX\upx.exe) вылетеал с ошибкой.
<!--QuoteEnd--></div><!--QuoteEEnd-->
Напрямую, ессно, нельзя. Во-первых в скрипт уже без двойных %% попадает, а после ExpandEnviromentString вместо %commander_path% появляется путь к папке Тотала и тогда все ОК. Ну ты хоть попробовал? Понимаешь, у меня-то все работает...
А вообще все это не важно. Тебе так нравится, ну и хорошо, хозяин-барин.

<!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->... в спецификации JavaScript для HTML есть зарезервированное для объявлений констант, слово const.

Взято из JavaScript справочника:
const JavaScript 1.5, NES 6.0 (расширение Netscape, только C-машина).<!--QuoteEnd--></div><!--QuoteEEnd-->
Понятно. Похоже на то, что речь идет о разных реализациях языка, потому как WSH использует именно JScript:
<!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->JScript is the Microsoft implementation of the ECMA 262, the vendor-independent programming language based on JavaScript.<!--QuoteEnd--></div><!--QuoteEEnd-->Так что где-то возможны и более существенные различия, будь готов.
Кстати, про Quit это тоже из того справочника? Что там писано про это?
Volniy
Ст. лейтенант
 
Сообщений: 121
Зарегистрирован: Сб ноя 22, 2003 11:42 pm
Пункты репутации: 0

Пред.След.

Вернуться в Total Commander

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

cron