Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有参数的PHP Windows Bat文件_Php_Windows_Batch File_Filepath - Fatal编程技术网

带有参数的PHP Windows Bat文件

带有参数的PHP Windows Bat文件,php,windows,batch-file,filepath,Php,Windows,Batch File,Filepath,我们目前必须将大约200名学生导入我们的active directory。我们有一个BAT文件,它在服务器上创建用户和文件夹 我编写了一个脚本,扫描MSSQL数据库中的新生,将他们保存到一个数组中,然后使用system()调用cmd.exe并运行BAT文件来创建学生 BAT文件位于我的Y驱动器上(另一台服务器上)。我们目前也使用DFS路径,因此我也可以通过这种方式访问bat文件 值得注意的是: 1) BAT文件的两个路径中都有空格 2) 我还需要将参数传递给BAT文件 目前,这是PHP中我的sy

我们目前必须将大约200名学生导入我们的active directory。我们有一个BAT文件,它在服务器上创建用户和文件夹

我编写了一个脚本,扫描MSSQL数据库中的新生,将他们保存到一个数组中,然后使用system()调用cmd.exe并运行BAT文件来创建学生

BAT文件位于我的Y驱动器上(另一台服务器上)。我们目前也使用DFS路径,因此我也可以通过这种方式访问bat文件

值得注意的是: 1) BAT文件的两个路径中都有空格 2) 我还需要将参数传递给BAT文件

目前,这是PHP中我的system()参数的状态:

$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文件?我现在被难倒了

非常感谢

菲尔

另外,我正在通过命令行运行PHP脚本:

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

如果批处理文件位于带有空格的路径中,则需要引用参数:

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

如果参数包含空格,也需要引用它们。
cmd不能识别单引号,它必须是双引号。

如果路径有空格,是否不需要使用双引号?这可能是个愚蠢的问题,我从来没有亲自尝试过。我尝试过用单引号将整个语句封装起来,然后用双引号将路径封装起来,但这似乎也不起作用。它将路径中的第一个空格视为路径的终点。不过,我会再试一试,只是再检查三次@Daniel Casserly事实上,我已经试过了,并且注意到了我的错误!我现在可以运行Bat文件了!相关的,只有一个小查询,如果我传递的参数之一有一个单引号(即O'Brien),escapeshellcmd函数是否会对此进行转义?换句话说,我需要用双引号将这个参数封装起来吗?单引号与Windows命令处理器无关。但正如前面所说的,无论如何,你可能应该引用所有关于安全的论点。