Вопрос
Как передать МНОГО параметров в скрипт?
Решил написать маленький WHS скриптик для копирования файлов по определенному сценарию и столкнулся с такой проблемой:
имена файлов для копирования нужно как-то в этот скрипт передать, например так:
myScript.vbs zzz\zzz\zzz.zzz zzz\zzz\zzz\zzz1.zzz zzz2\zzz2.zzz …
или, что то же самое, выделить мышой в эксплорере и «Send_их_To» мой скриптик. Соответственно в "\win…\SendTo\» я добавляю линк на мой скрипт. ну а уже в скриптике что-то вроде:
Set objArgs = WScript.Arguments
For I = 0 to objArgs.Count — 1
WScript.Echo objArgs(I)
'… ну или все что мне нужно …
Next
…
так вот проблема в том, что, если выделить три-пять-десять файлов, то все работает нормально, а если выделить достаточно много — то выдается ошибка:
Unable to execute — arguments list is too long
Причем ошибка не зависит от запускаемой программы/скрипта — очевидно, что срабатывает ограничение длины командной строки (кажется 254) но с другой стороны если выделить 100 файлов и Send_их_To какую-то директорию, или «Mail Recipient», то все 100 посылаются.
Значит можно как-то это сделать?
Так как же мне передать в скрипт/программу 100 выделенных в эксплорере файлов?
Ответ
Начну с цитаты:
"Web-сервер передает и извлекает информацию из вашей программы CGI в двух разных формах:
— как параметры командной строки;
— как файл данных.
Windows CGI 1.3 определяет один параметр командной строки:
CGI.exe cgi-data-file.ini»
Д.Чепмен «Internet-приложения в Delphi»
Огрызки спецификацию WinCGI, но по-русски, можно взять тут
www.citforum.ru Суть в том, что cgi-data-file.ini — это обычный ини-файл. И в одной из секции указывается значения полей формы и имя входного файла — еже ли таковой имеется. К сожалению, не зная под какой сервер Вы пишите CGI нельзя с определенностью сказать как будет называться секция и параметры в ней.
— * --
Теперь, что касается возможности «винды» работать с большим списком файлов. На самом деле — все зависит от того, в какой программе Вы работаете. Эксплорер — это еще не винда. Замените в секции [boot] файла system.ini строку
shell=Explorer.exe
на
shell=far.exe
И эксплорер Вы будет запускать, как обычное приложение из Фара :)
Для обработки большого списка файлов некоторым внешним приложением существует два способа:
— либо сохранить этот список файлов в tmp-файле, и передать внешнему приложению имя этого файла со списком, указав, что файлы внутри;
— либо передавать внешнему приложению по одному файлу
Из конференции Expert_FAQ
Copyright 2000-2004 Сообщество Чайников
Контактная информация