如何从批处理文件传递参数到Perl脚本
所以,我想知道如何从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
这些都不会产生我输入命令时获得的成功屏幕。是的,我有一个暂停,所以我可以验证...
任何想法?有没有什么明显的我失踪的参数?
问题出现在批处理文件中,冒号变成平等。
awstats.pl -config=blahblah.com -update
即奇数虽然因为命令行接受PARAMS冒号。也许它在批处理文件中被神奇地忽略了。
尝试调用明确的Perl:
perl awstats.pl -config:blahblah.com -update
另外,还要确保Perl是在您的%PATH%。
不,我已经注册的处理程序映射指向特等到Perl解释器。好猜猜。 – FlavorScape 2012-04-05 00:43:30
我不认为这将在批处理文件中工作。 – 2012-04-05 00:56:45
如果它是一个处理程序/扩展的东西,给它一个不同的扩展名,并将其注册到任何你喜欢的地方。不是你应该那样做,但是perl不关心你使用的是什么扩展。 – 2012-04-05 02:04:11
我对批处理文件一无所知,但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
有趣,但我正在寻找一个更加'窗口'的解决方案,因为我们在这里没有一个perl开发人员 - 而且这对未来的维护程序员来说更容易理解/更新。 – FlavorScape 2012-04-05 20:14:31
嗯......在开关和下面的参数之间使用'='或空白是perl解析其参数的标准方式......我想知道为什么':'在cmd shell中发布时实际上被接受了。为血腥的细节运行'perldoc Getopt :: Long'。 – 2012-04-05 17:44:54
是的,我真的从awstats文件中拉出':'。也许cmd shell自动修复它? – FlavorScape 2012-04-05 20:11:36