2012-04-05 135 views
2

所以,我想知道如何从Windows中的.bat文件传递参数到perl脚本。我正在运行主动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 

即奇数虽然因为命令行接受PARAMS冒号。也许它在批处理文件中被神奇地忽略了。

+0

嗯......在开关和下面的参数之间使用'='或空白是perl解析其参数的标准方式......我想知道为什么':'在cmd shell中发布时实际上被接受了。为血腥的细节运行'perldoc Getopt :: Long'。 – 2012-04-05 17:44:54

+0

是的,我真的从awstats文件中拉出':'。也许cmd shell自动修复它? – FlavorScape 2012-04-05 20:11:36

0

尝试调用明确的Perl:

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

另外,还要确保Perl是在您的%PATH%。

+0

不,我已经注册的处理程序映射指向特等到Perl解释器。好猜猜。 – FlavorScape 2012-04-05 00:43:30

+0

我不认为这将在批处理文件中工作。 – 2012-04-05 00:56:45

+0

如果它是一个处理程序/扩展的东西,给它一个不同的扩展名,并将其注册到任何你喜欢的地方。不是你应该那样做,但是perl不关心你使用的是什么扩展。 – 2012-04-05 02:04:11

3

我对批处理文件一无所知,但Perl附带的许多程序在Strawberry Perl中都有批处理文件。他们都这个样子,这是一个巧妙的运用perl-x开关:

@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 2012-04-05 20:14:31

相关问题