2012-04-05 9 views
2

Итак, мне интересно, как передать параметры в perl-скрипт из .bat-файла в Windows. Я запускаю активный perl. Если вам интересно, почему, я автоматизирую индексацию журналов для awstats + iis.как передать параметры perl-скрипту из командного файла

я могу сделать это штраф просто набрав команду непосредственно:

awstats.pl -config:blahblah.com -update 

Я попытался положить, что в моей пакетный файл напрямую. Я также попытался использовать стандартный способ пакетного файла:

awstats.pl /config:blahblah.com /update 

Я даже попытался это, думая тире был разобран по-разному Perl:

awstats.pl /-config:blahblah.com /-update 

Так я думал, что я стараюсь избежать тире (для весело, конечно):

awstats.pl /%-config:blahblah.com /%-update 

Затем я попытался вышеуказанные комбинации, пытаясь избежать двоеточие:

awstats.pl /config%:blahblah.com /update 

Ничего из этого не создало экран успеха, который я получаю при вводе команды. Да, у меня была пауза, поэтому я мог проверить ...

Любые мысли? Есть ли что-то очевидное, что мне не хватает параметров?

ответ

1

Проблема была в командном файле, толчок становится равным.

awstats.pl -config=blahblah.com -update 

Это странно, хотя из-за того, что командная строка принимает двоеточие для параметров. Возможно, это волшебное игнорирование в пакетных файлах или что-то в этом роде.

+0

Хмм ... с использованием '=' или пробела между коммутатором и следующим аргументом является стандартный способ, по которому perl анализирует свои аргументы ... Интересно, почему ':' был фактически принят при выпуске в оболочке cmd. Запустите 'perldoc Getopt :: Long' для подробностей. –

+0

Да, я действительно натягивал ':' из awstats doc. Может быть, оболочка cmd автоматически исправляет это? – FlavorScape

0

Try вызова Perl явно:

perl awstats.pl -config:blahblah.com -update 

Кроме того, убедитесь, что Perl в вашей% PATH%.

+0

Неа, я уже зарегистрированные отображения обработчиков, чтобы указать .pl интерпретатору Perl. Приятно угадать. – FlavorScape

+0

Я не думаю, что это сработает в пакетном файле. –

+0

Если это вещь обработчика/расширения, дайте ей другое расширение и зарегистрируйте это как угодно. Не то чтобы вы это делали, но perl не волнует, какое расширение вы используете. –

3

Я ничего не знаю о пакетных файлах, но многие из программ, которые поставляются с Perl, имеют эквиваленты пакетного файла в Strawberry Perl. Все они выглядят так, что это умное использование -x переключателя perl «s:

@rem = '--*-Perl-*-- 
@echo off 
if "%OS%" == "Windows_NT" goto WinNT 
perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9 
goto endofperl 
:WinNT 
perl -x -S %0 %* 
if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl 
if %errorlevel% == 9009 echo You do not have Perl in your PATH. 
if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul 
goto endofperl 
@rem '; 
...perl script goes here... 
__END__ 
:endofperl 
+0

интересный, но я искал более «оконное» решение, потому что здесь у нас нет одного разработчика perl, и программистам будущего обслуживания было бы легче понять/обновить. – FlavorScape