2011-04-15 60 views
2

如果我做的:如何用Perl中的路徑中的空格啓動Windows程序?

my program = "C:\\MyPath\\MyProg.exe"; 
system(("start", $program)); 

MYPROG啓動就好了,系統()命令後,我的腳本恢復。但是,如果路徑中有空間像

my program = "C:\\My Path\\MyProg.exe"; 
system(("start", $program)); 

它似乎運行cmd,而不是MyProg。

我已經試過的東西喜歡引用:

my program = "C:\\My Path\\MyProg.exe"; 
system(("start", '"' . $program . '"')); 

但似乎沒有任何幫助。

當然我可以用fork()來解決它,但我想了解爲什麼我不能傳遞一個空格作爲參數的路徑。

+0

我懷疑,這可與雙引號和單反斜線。 – mob 2011-04-15 19:07:58

+0

你說得對。當我清理我的示例時,我放棄了額外的反斜槓。抱歉。現在修復。 – 2011-04-18 13:27:59

回答

3

這是因爲內置start命令是有點不可思議,當涉及到的報價。您可以在命令行上使用start "C:\My Path\MyProg.exe"重現此操作,並查看相同的結果。要正確執行它,你需要在它之前有一組空引號:start "" "C:\My Path\MyProg.exe"

所以,你的最終結果應該是:

my program = "C:\\My Path\\MyProg.exe"; 
system('start "" "' . $program . '"'); 

編輯包括從池上的寶貴意見。我的perl有點生鏽,因爲我多年沒有使用它。

+0

在NT上沒有start.exe這樣的東西,在Win9x上有start.exe,在NT上它是cmd.exe中的一個內置命令 – Anders 2011-04-15 18:57:30

+0

@Anders:謝謝,我記得回到開始的那一天.exe :) – Joshua 2011-04-15 18:58:43

+1

@Chris Nelson,'system((「」start「,'''''。$ program。'」'));'工作,但這只是因爲'system'在Windows中是有問題的。 'system('start'「''。$ program。'」');'或'system(qq {start「」「$ program」});'會更好。 '系統('開始','',$程序)'應該也能工作,但我不會冒險開始的怪異。 – ikegami 2011-04-15 19:03:04

0

的Try ...

my program = "C:/\"My Path\"/MyProg.exe"; 
相關問題