2012-08-29 99 views
0

我們目前必須將大約200名學生導入我們的活動目錄。我們有一個BAT文件,用於創建服務器上的用戶和文件夾。帶參數的PHP Windows Bat文件

我已經寫了一個腳本,它掃描我們的MSSQL數據庫爲新學生,將它們保存到一個數組,然後使用system()調用cmd.exe並運行BAT文件來創建學生。

BAT文件位於我的Y驅動器(位於另一臺服務器上)。我們目前也使用DFS路徑,所以我可以通過這種方式訪問​​bat文件。

其值得注意: 1)兩個路徑到BAT文件中有空格的 2)我需要將參數傳遞給BAT文件以及

目前,這是我的系統的狀態()參數在PHP中:

$bat = escapeshellcmd("cmd /c Y:\SharedRes\Path To Createstudent\createstudent.bat {$stuArray['forename']} {$stuArray['surname']} {$stuArray['username']} {$stuArray['year']} {$stuArray['sf']}"); 
system($bat); 

並與DFS路徑:

$bat = escapeshellcmd("cmd /c '\\organisation.local\Path To Createstudent\createstudent.bat {$stuArray['forename']} {$stuArray['surname']} {$stuArray['username']} {$stuArray['year']} {$stuArray['sf']}'"); 
system($bat); 

每次我嘗試運行此,我得到以下錯誤:

The filename, directory name, or volume label syntax is incorrect 

任何想法如何讓PHP實際運行BAT文件?我目前很難過。

非常感謝

菲爾

PS我正在通過命令行的PHP腳本:

php.exe -f "C:\import.php" 
+2

如果路徑中有空格,路徑是否需要加雙引號?可能是一個愚蠢的問題,從來沒有嘗試過這個個人 –

+0

我試圖用單引號封裝整個語句,然後在雙打中的路徑,似乎也沒有工作。它將路徑中的第一個空間視爲路徑的結尾。我會再給它三次檢查! –

+0

@Daniel Casserly其實,我已經試過了,注意到我的錯誤!我可以讓Bat文件立即運行! –

回答

2

如果批處理文件與您需要引用參數空間的路徑:

cmd /c "Y:\SharedRes\Path To Createstudent\createstudent.cmd" ... 

另外,如果參數中包含空格,則需要引用它們O操作。單引號不被cmd識別,它必須是雙引號。

+0

只有1個小查詢,如果其中一個參數傳遞給我一個單引號(IE O'布里恩)將escapeshellcmd函數逃脫這個?換句話說,我需要用雙引號封裝這個參數嗎? –

+1

單引號與Windows命令處理器無關。但正如所說的,無論如何你應該引用所有的安全論點。 – Joey