Windows

Windows 上“call perl script.pl”與“call script.pl”之間的區別

  • January 9, 2017

在 Windows 伺服器上(我測試了 2008 R2 和 2012 R2),我們注意到從批處理呼叫的 Perl 腳本的執行有不同的行為。

考慮如下原始批處理文件:

:beginlbl
call path\script.pl
goto :beginlbl

遲早(有時在執行數百次後僅執行幾次腳本後)會出現錯誤消息: “Windows 無法訪問指定的設備、路徑或文件。您可能沒有適當的權限來訪問該項目。”

如果將第二行程式碼修改為如下所示:

call perl path\script.pl

(注意腳本前的執行檔名。)腳本將永遠執行而不會出現問題。

在上述兩種情況下,Windows 的執行方式有何不同?

使用文件關聯會通過一個 shell 程序來評估文件類型(副檔名)並啟動適當的程序。你可能壓倒了這一點。這類似於呼叫 .txt 時獲取註冊編輯器的方式。另請參見 ShellExecute。

直接呼叫執行檔可以省去中間人,而且總是首選。

Uslackr 對您原始問題的評論也是正確的,他指出系統路徑上的 perl 執行檔已被呼叫。您最好直接指定您希望通過完整路徑執行的執行檔,以避免意外呼叫另一個執行檔。這對可靠性和安全性都有好處。犧牲了可移植性,但您可以選擇優先級。

引用自:https://serverfault.com/questions/819872