2012-04-05 138 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

相關問題