СообЧа > База Знаний > Программирование

Вопрос

Как передать МНОГО параметров в скрипт?

Решил написать маленький 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 Сообщество Чайников
Контактная информация